c语言1加到10000,用float型存储结果为什么会出错?

#include <stdio.h>
int main(int argc, char const *argv[])
{
int i;
float sum = 0;
for(i = 1; i <= 10000; i++)
{
sum += i;
}
printf("%f\n", sum);
return 0;
}

为什么输出的结果是50002896.000000?
正确结果应该是50005000,这应该没有超出float的范围吧?

int main(int argc, char const *argv[])
{
int i;
double sum = 0.0;//把这个改成double就好了
for(i = 1; i <= 10000; i++)
{
sum +=i;
}
printf("%f\n", sum);
return 0;
}
/*
建议看看谭浩强的c语言书。很详细。或者百度一下 浮点数在计算机中的存储。

浮点数和整数相加时,编译器会把整型转换为浮点型数据进行加减,并且计算机内部采用二进制指数形式对数据进行存储, 在运算的时候存在截断误差.
一般情况下,C中的浮点数常量为double类型,只是将double类型的转换成float的类型,那就已经发生了精度损失。然后是和int相加,也是转换成double进行,然后再转换回来,又发生了精度损失。用double肯定没有问题。

*/

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-11
因此,鲁达是向整个封建统治阶级挑战而主动地走上了反抗的道路。“三代将门之后”的杨志,走上梁山的道路更为曲折。“一刀一枪,博个封妻荫子”是他的生活目的。为了实现这个目的,他可以委曲求全。失陷“花石纲”并没有动摇他追求“功名利禄”的意愿,高俅的排斥也未能把他从这条路上拉回来,在充军得到梁中书的青睐后,追求名利的欲望也更加炽烈了。
相似回答