#include <stdio.h> #define N 51200000 int main() { float f = 0.0f; for(int i = 0; i < N; i++) f += 1.0f; fprintf(stdout, "%f\n", f); return 0; }
期望的结果是51200000,结果却是16777216,why?
51200000
16777216
单精度浮点数有效位只有23bit
23
而511999999需要26bit。
511999999
26
使用double就够了,52bit有效位。
double
52
各种浮点数的精度参考此处。
更新
关于这个问题有专门的介绍:
Unit in the last place
标签
查看
233 次