Floating point 为什么把小数字加在浮点数上是错误的?
可能重复:Floating point 为什么把小数字加在浮点数上是错误的?,floating-point,equality,Floating Point,Equality,可能重复: 我想知道为什么这个循环是无限的?0.1不能用浮点表示: printf("%.16f\n", 0.1f); 显示: 0.1000000014901161 所以n永远不会完全等于1 正如@sirlak在下面的评论中所说,像这样测试浮点变量的相等性几乎永远都是不正确的。Nice x-ref,@Neil,带有关于该主题的规范著作的链接或副本。test for>=或0.99)&(i
我想知道为什么这个循环是无限的?
0.1
不能用浮点表示:
printf("%.16f\n", 0.1f);
显示:
0.1000000014901161
所以n
永远不会完全等于1
正如@sirlak在下面的评论中所说,像这样测试浮点变量的相等性几乎永远都是不正确的。Nice x-ref,@Neil,带有关于该主题的规范著作的链接或副本。test for>=或0.99)&(i<1.01)@sirlark:“从不测试严格相等”并不总是有效的建议,但通常都是这样。出于真正的好奇,你能给我一个例子,你需要测试严格的值相等性(而不是以指针相等的其他方式进行测试)@sirlark:老实说,我想不出一个现成的例子。我想我的观点是,你的规则应该更接近于“除非你确定它是合适的,否则永远不要测试严格的平等”!关键是“从不测试平等性”非常接近于事实,您不妨将其作为一条绝对规则来采用,以确保代码的正确性,并保持其他人对代码的可读性。
0.1000000014901161