brf*_*rfh 2 c floating-point loops
我试图更新我的C知识,并且遇到了float错误。
例如,此循环将是无限的:
#include <stdio.h>
int main(){
for (float i =18000000; i<18000002; i++){
printf("%f\n", i);
}
printf("win\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么这样工作?
A的float精度有限。假设它是在IEEE754单精度浮点中实现的,则它只有24位精度,或大约7个十进制数字。
数字18000000可以精确地用这种格式表示,但是18000001不能,因此加1会导致低端的多余位被舍入或截断,从而得到值18000000。因此,您将得到一个无限循环。