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