close
數學上 運算規則是先加減後乘除 ;至於是先乘還事先除無所謂
但
程式上 卻差很多= =
紀錄一個雙精浮點 3.d-1
理論上應該是會記成0.3
但實際上卻是記成2.9999999999999998
以有效位數15未來說 的確是近似於0.3 但拿來運算卻有很大的不同= =
ex:
real*8 hw,de
integer b
hw=3.d-1
de=1.d-2
b=3
int(b*hw/de) =79 [不等於80]
但
int(b*(hw/de))=80
先乘後除與先除後乘差很多!!
why? 對點腦來說 浮點數為一個近似值
所以
hw他是記成2.99999999999999988.d-1
de記成 1.00000000000000002.d-2
hw/de= 3.00000000000000000.d1
3*(hw/de)= 9.00000000000000000.d1
3*hw= 8.99999999999999911.d-1
3*hw/de= 8.99999999999985789.d1
int( 3*(hw/de) =90
int( 3*hw/de)=89
全站熱搜
留言列表