浮点舍入的潜在问题

时间:2014-02-28 18:35:58

标签: algorithm floating-point pseudocode floating-accuracy

我遇到了以下问题,我想在提交之前确保完全理解。

  

简要解释如果实现以下算法可能出现的问题。   (提示:记住使用浮点数舍入错误的问题)

assign n the value 0.1 
while (n is not equal to 1.0) 
   print the value of n 
   assign n the value n + 0.00001
end while

我相信答案是,如果n的值等于1.0,则不会说该怎么办。我是在看这个还是我错过了一些明显的东西?

3 个答案:

答案 0 :(得分:4)

问题是0.00001在标准浮点中不能完全表示,所以当你继续添加时,你会得到一个像0.999999999998而不是1.0的数字。

因此n永远不会等于1.0

因此循环永远不会终止。

答案 1 :(得分:1)

由于四舍五入,比较可能不会停止。它应该解决当n大于1.0

时会发生什么

答案 2 :(得分:1)

您可以循环整数并与整数进行比较,或者如果您想使用浮点数,请将最后一次比较更改为

while (n is less than 1.0) 

这样的循环可能有意义,只是为了看结果并理解,平等永远不会发生。对于你在二进制和二进制系统中工作,10 -5 不是有限的。因此,它被削减,计数不准确。

另一方面,如果您不使用任何具体语言,可能是这样,您可以基于十进制算法在机器上实现算法。这个算法运行正常。