【发布时间】:2019-09-09 12:54:43
【问题描述】:
我正在尝试更新我的 C 知识,但我遇到了浮动错误。
例如这个循环将是无限的:
#include <stdio.h>
int main(){
for (float i =18000000; i<18000002; i++){
printf("%f\n", i);
}
printf("win\n");
return 0;
}
为什么会这样?..
【问题讨论】:
-
可能是因为
18000001会向下舍入到18000000,所以永远不会达到18000002,因为它在增加后总是向下舍入。发生这种情况的原因是因为IEEE 754 floats have a precision of 6-9 digits 所以 1 可能已经超出了该范围。 -
`18000000.000000.000000.00000000000000000000000000000000000000000000000000000000000000000000000000000000.000000.000000.000000000000000000000000000000000000000000000000000000000000000000.000000000000000000000000000000来
-
@Blaze 听起来像是对这个问题的回答,除非我们应该简单地把它当作“为什么浮点不准确”的骗子。
-
@Lundin,是的,我认为这个骗子很合适。
-
这就是为什么你应该忘记
float是一个类型。浮点声明拼写为double
标签: c loops floating-point