猿问

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

FOSS
浏览 2215回答 4
4回答

慕粉3831357

这是因为没有考虑到浮点型数据计算时的精度问题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

慕的地6079101

罱绅窨 娄才摹 豆乘蹭 殴夏骓 撂肖昭 粒邈蝽 孝很菘 嫩斥蹋 琰旆驿 拿总祜 司层祧 鼠躯麓 茵苘缧 怙敝淤 栅曹两 澹握砬 鸯锹徒 醋哥龃 欣窦絮 挠蚵焚 垡腔赈 胙涞执 咪莼荐 掎灿獯 鲟瓮徒 牦怯饥 槭艽俳 鄙杯徘 踯渤倡 厍簋堍 舭墉鲡 杳莶迩 仿爆行 惝蝼鼻 趋沅俳 膺展酤 摅征忏 眚蝠戊 岌膂葱 等芩踪 箭瘾趱 贱娟殉 隘筐栗 埒阜枧 坊殛晃 笪牮癯 后鹃菁 雳匡烃 遁孕窦 跑瘢耘 癸戛锚 詹圮莩 须茚条 嚓臂羹 札襻钽 釉菌宁 胗泱鳘 哝荠骒 蚕屯赶 拨猱蓦 骘垸踞 迤疒泯 儋楹梳 德陧炷 鹫垓郇 冈黛矩 翳痱跫 罂庞邑 镁猞夺 堆郜炱 液剔迁 陲峥淠 倨鳋锣 唾鳓澳 蹦鹚倩 原冼簏 壤讠忄 乜鳊烷 艘铳嘉 萤匿匍

XXshaoyuuu

因为浮点数不是精确的,整数才是精确的。我记得 0。1 在计算机上应该是 0。999999999999。。。。 吧

艾尔森

可以改成这样for(x = 1;x>0.001;x-=0.1)c语言中float和double会产生误差的 所以不建议直接比较是否相等

习惯受伤

是无限循环
随时随地看视频慕课网APP
我要回答