为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 for (x=1.0;x!=0.0;x-=0.1) 这段是无限循环?

为什么 for (x=1.0;x!=0.0;x-=0.1) 这段是无限循环?

C
FOSS 2017-01-20 14:38:49
查看完整描述

4 回答

已采纳
?
慕粉3831357

TA贡献6条经验 获得超1个赞

这是因为没有考虑到浮点型数据计算时的精度问题

float和double类型主要是为科学和工程计算而设计的。他们执行的是二进制浮点运算,由于二进制的局限性,有时候无法得到准确的结果。

下面的代码,可以说明:

System.out.println(0.05+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(123.3/100);

在《Effective Java》中提到一个原则:float和double只能用来作科学计算或者是工程计算,但在商业计算中我们一定要用java.math.BigDecimal

查看完整回答
反对 回复 2017-01-20
?
XXshaoyuuu

TA贡献2条经验 获得超0个赞

因为浮点数不是精确的,整数才是精确的。我记得 0。1 在计算机上应该是 0。999999999999。。。。 吧
查看完整回答
反对 回复 2017-02-08
?
艾尔森

TA贡献33条经验 获得超27个赞

可以改成这样

for(x = 1;x>0.001;x-=0.1)

c语言中float和double会产生误差的 所以不建议直接比较是否相等

查看完整回答
反对 回复 2017-01-21
?
习惯受伤

TA贡献885条经验 获得超1144个赞

是无限循环
查看完整回答
反对 回复 2017-01-21
  • 4 回答
  • 0 关注
  • 2201 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信