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

 

 

 

全站熱搜
創作者介紹

quantum2nd 發表在 痞客邦 留言(0) 人氣()