我遇到了以下问题,我想在提交之前确保完全理解。
简要解释如果实现以下算法可能出现的问题。 (提示:记住使用浮点数舍入错误的问题)
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,则不会说该怎么办。我是在看这个还是我错过了一些明显的东西?
答案 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 不是有限的。因此,它被削减,计数不准确。
另一方面,如果您不使用任何具体语言,可能是这样,您可以基于十进制算法在机器上实现算法。这个算法运行正常。