Project1
标题:
为什么p (3.0-8.0/3.0)*3.0 == 1.0 显示false?
[打印本页]
作者:
受pia专用ID
时间:
2012-1-20 18:01
标题:
为什么p (3.0-8.0/3.0)*3.0 == 1.0 显示false?
本帖最后由 受pia专用ID 于 2012-1-21 20:00 编辑
p (3.0-8.0/3.0)*3.0 #=> 1
但为何p (3.0-8.0/3.0)*3.0 == 1.0就显示false?怎么解决?
p (3.0-8.0/3.0)*3.0 == 1 还是显示false啊
回复地面:
((3.0-8.0/3.0)*3.0).to_f==1
我这么写还是显示false
只能用这个方法了:Math.abs((3.0-8.0/3.0)*3.0-1)<=0.000001 dsu_plus_rewardpost_czw
作者:
feizhaodan
时间:
2012-1-21 00:39
本帖最后由 feizhaodan 于 2012-1-21 00:40 编辑
p (1.0).class
p (1).class
复制代码
自己对比下。这就是人和计算机认识的区别。
作者:
yangff
时间:
2012-1-21 00:43
Math.abs((3.0-8.0/3.0)*3.0-1)<=0.000001
这是普通程序猿
((3.0-8.0/3.0)*3.0).to_f==1
这是文艺程序猿
((3.0-8.0/3.0)*3.0).to_i.to_s(16)=="0x01"
这是2B程序猿
作者:
禾西
时间:
2012-1-21 01:29
p (3.0-8.0/3.0)*3.0 #=>1.0000000000000004
作者:
第七水螰
时间:
2012-1-21 23:40
這是當代計算機浮點運算普遍的缺陷。目前的浮點數表示法是以二進制表示有效數位,當有限的十進制有效數位被轉換為二進制時,很多情況下就會導致二進制的表示成為無限數位。在有限的計算機位(32 位單精度,64 位雙精度)中表示浮點數時,它實際存儲的值只是近似於用戶原本想表示的值,是經過了計算機芯片「零舍一入」的。再經過一系列浮點運算後,這個誤差值就累積起來了,導致運算結果的誤差離預期的越來越遠。以前很多計算機軟件都是忽略了浮點運算的誤差而導致了嚴重的後果,導致火箭航程失控,股票系統崩潰等等。
作者:
怕鼠的猫
时间:
2012-1-21 23:46
尽量先做乘法,最后做除法。尽量谋求整除的效果。
尤其是判定是否相等的时候, a/b==c/d 这样的写法就比较糟糕,不如改成等价的 a*d==b*c ,避免除法,避免舍入误差。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1