回 帖 发 新 帖 刷新版面

主题:关于一个浮点输出的问题

#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个回复)

沙发

i!=1好像是这个判断有问题

板凳

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 楼

浮点数 和 实数 是不一样的
当你写下 double i = 0.1 时,你应该明白 i 等于 0.1(浮点数),但绝对不等于 0.1(实数)
因为 0.1 是 1/2/5,1/5是没法用有限个1/2^n来表示的

我来回复

您尚未登录,请登录后再回复。点此登录或注册