将小值与零进行比较,具体精度

时间:2016-04-24 10:46:37

标签: c decimal floating-accuracy

我有一个打印出非常小值的矩阵的程序。我的矩阵的一个例子是

0.00000000000000004  0.12300000000000000

0.00000000011111114  0.00000000000038544

我想要做的是将每个值与zero进行比较,并将其接受为zero,具体精确度为9位小数。换句话说,如果一个数字的第一个十进制值为9 zeros,我想将其视为zero,否则不会。

我搜索过很多但却一无所获。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

正如我在评论中指出的那样,您只需通过f比较浮动-1e-9 < f < 1e-9

你需要正面和负面边界,以确保它对正数和负数都能正常工作。您使用的是1e-9而不是1e-10,因为如果某个数字小于1e-9,则是一个8位小数为0的数字,则它有9位小数或更多零。

请注意,由于从{十进制到二进制时1e-9的浮动舍入,您可能会看到一些舍入错误。

答案 1 :(得分:2)

我的想法与@MicroVirus在评论中提到的相似。您只需将其与特定数字进行比较即可:

if(num < 1E-9 && num > -1E-9)
    num = 0;

if(num * 1E9 < 1 && num * 1E9 > -1)
    num = 0;