这个问题已经有了答案:
How is floating point stored? When does it matter?
10个答案
我今天考了C,有人问我一个类似的问题:
这个程序有什么问题:

for( x = .1 ; x != 1.0 ; x += .1)
    printf("%f\n", x);

我无法解决这个问题,因为我必须写一些东西,所以我将.1标记为一个错误。但是,当我回家的时候,我运行这个程序,结果发现当x等于1.0并且陷入无限循环时,它不会中断:
$ cat exam.c
#include <stdio.h>

int main(int argc, char **argv)
{
    float x;

    for(x = .1 ; x != 1.0 ; x += .1)
        printf("%f\n", x);

    return 0;
}
$ gcc exam.c -o exam
$ ./exam
0.100000
0.200000
0.300000
0.400000
0.500000
0.600000
0.700000
0.800000
0.900000
1.000000 <- ?
1.100000
1.200000
1.300000
1.400000
1.500000
....

有人能解释一下为什么会这样吗?

最佳答案

这是一个典型的家庭作业问题。
问题是0.1不能精确地存储在float-better检查中
然而,这只适用于一个非常有限的范围,如cthulhu说。我完全没想到那个问题。当然,最好使用int并在以后除以它的值。

10-05 18:30