以特定精度将小值与零进行比较
Compare small values with zero with specific accuracy
我有一个程序可以打印出一个值非常小的矩阵。我的矩阵的一个例子是
0.00000000000000004 0.12300000000000000
0.00000000011111114 0.00000000000038544
我想做的是将每个值与 zero
进行比较,并接受它是具有特定精度的 zero
,即小数点后 9 位。换句话说,如果一个数字有 9 个 zeros
作为它的第一个十进制值,我想将其视为 zero
,否则不是
我搜索了很多,但真的一无所获。有什么想法吗?
我的想法与@MicroVirus 在他的评论中提到的类似。您可以简单地将其与特定数字进行比较:
if(num < 1E-9 && num > -1E-9)
num = 0;
或
if(num * 1E9 < 1 && num * 1E9 > -1)
num = 0;
正如我在评论中指出的那样,您可以通过 -1e-9 < f < 1e-9
.
简单地比较浮点数 f
您需要正负边界以确保它对正数和负数都能正常工作。你使用 1e-9
而不是 1e-10
因为如果一个数字小于 1e-9
,一个有 8 位小数 0 的数字,那么它有 9 位或更多的零。
请注意,由于 1e-9
的浮点舍入,当从十进制转换为二进制时,您可能会看到一些舍入错误。
我有一个程序可以打印出一个值非常小的矩阵。我的矩阵的一个例子是
0.00000000000000004 0.12300000000000000
0.00000000011111114 0.00000000000038544
我想做的是将每个值与 zero
进行比较,并接受它是具有特定精度的 zero
,即小数点后 9 位。换句话说,如果一个数字有 9 个 zeros
作为它的第一个十进制值,我想将其视为 zero
,否则不是
我搜索了很多,但真的一无所获。有什么想法吗?
我的想法与@MicroVirus 在他的评论中提到的类似。您可以简单地将其与特定数字进行比较:
if(num < 1E-9 && num > -1E-9)
num = 0;
或
if(num * 1E9 < 1 && num * 1E9 > -1)
num = 0;
正如我在评论中指出的那样,您可以通过 -1e-9 < f < 1e-9
.
f
您需要正负边界以确保它对正数和负数都能正常工作。你使用 1e-9
而不是 1e-10
因为如果一个数字小于 1e-9
,一个有 8 位小数 0 的数字,那么它有 9 位或更多的零。
请注意,由于 1e-9
的浮点舍入,当从十进制转换为二进制时,您可能会看到一些舍入错误。