主题:关于一个浮点输出的问题
nevermorenec
[专家分:0] 发布于 2011-01-26 12:14:00
#include<stdio.h>
double i;
int main()
{
for(i=0;i!=1;i+=0.1)
printf("%.lf",i);
system("pause");
return 0;
}
请帮忙[b]详细解释[/b]一下为什么会无限输出(至少输出很长时间),问题是不是出在i+=0.1部分?
回复列表 (共3个回复)
沙发
ckrok [专家分:30] 发布于 2011-01-26 12:20:00
i!=1好像是这个判断有问题
板凳
bruceteen [专家分:42660] 发布于 2011-01-26 14:40:00
0.0
0.1000000000000000055511151231257827021181583404541015625
0.200000000000000011102230246251565404236316680908203125
0.3000000000000000444089209850062616169452667236328125
0.40000000000000002220446049250313080847263336181640625
0.5
0.59999999999999997779553950749686919152736663818359375
0.6999999999999999555910790149937383830547332763671875
0.79999999999999993338661852249060757458209991455078125
0.899999999999999911182158029987476766109466552734375
0.99999999999999988897769753748434595763683319091796875
1.0999999999999998667732370449812151491641998291015625
3 楼
bruceteen [专家分:42660] 发布于 2011-01-26 14:43:00
浮点数 和 实数 是不一样的
当你写下 double i = 0.1 时,你应该明白 i 等于 0.1(浮点数),但绝对不等于 0.1(实数)
因为 0.1 是 1/2/5,1/5是没法用有限个1/2^n来表示的
我来回复