Dom*_*iik 3 floating-point equality
可能重复:
添加Double值不一致
int x = 0;
float n = 0;
while ( n != 1 ) {
n += 0.1;
++x;
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么这个循环是无限的?
Oli*_*rth 16
0.1 无法在浮点中精确表示:
printf("%.16f\n", 0.1f);
Run Code Online (Sandbox Code Playgroud)
显示:
0.1000000014901161
Run Code Online (Sandbox Code Playgroud)
所以n永远不会完全等于1.
正如@sirlak在下面的评论中所说的那样,测试浮点变量是否相同,这几乎是不正确的.