foo*_*foo 1 c floating-point floating-point-conversion
输出是
x=1000300 y=1000000, z=1000300
Run Code Online (Sandbox Code Playgroud)
我能理解我是如何得到x和z但是c的 y输出没有意义.
#include <stdio.h>
int main()
{ int i=0;
float a = 100;
a = a*a*a*a*a;
float c = 3;
float x = 1000000*c + a;
float y = a;
float z = 0;
for (i=0; i<1000000; i++)
{ y += c;
z += c;
}
z += a;
x /= 10000;
y /= 10000;
z /= 10000;
printf("x=%.0f y=%.0f, z=%.0f\n", x, y, z);
}
Run Code Online (Sandbox Code Playgroud)
值y从1E10开始(从赋值到a).你这一百万次加3.
麻烦的是a float最多有7个有效小数位数,所以你y每次都不会改变,因此结果除以10,000就是显示的10,000,000 1,000,000.
如果你用它编码double,你会看到更接近你期望的结果.