输出
x=1000300 y=1000000, z=1000300
我可以理解我是如何得到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);
}
答案 0 :(得分:5)
y
中的值从1E10开始(从分配到a
)。你这一百万次加3。
问题是float
最多有7个有效小数位,所以每次都有效地不改变y
,因此结果除以10,000是 10,000,000 显示1,000,000。
如果您使用double
对其进行编码,您会看到更接近预期的结果。