浮子溢出?

GBY*_*GBY 2 c c++

以下代码似乎总是生成错误的结果.我在gcc和windows visual studio上测试过它.是因为浮动溢出还是其他什么?提前致谢:)

#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;
}
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 13

float只有23位的精度.512000000需要26.简单地说,你没有正确答案所需的精度.

  • 实际上,512000000不需要26位.它是15625*2 ^ 15.因此,您需要14位精度和4位指数.实际问题是511999999需要26位精度. (10认同)
  • *然后获得*到512000000.无论哪种方式,这都是一个问题. (6认同)