Re: [問題] 計算的精準度問題

看板Fortran作者 (摸魚中)時間15年前 (2009/08/07 03:24), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串6/6 (看更多)
※ 引述《jyhchyunlu (jyhchyunlu)》之銘言: : 各位板友好 : 我碰上了一個很奇怪的問題 : 是這樣的 : 有三個變數 AL ALO E0 格式都是DOUBLE : ALO=1.000000000000000 : AL 0.999999600000000 : E0=(AL-ALO)/ALO : 答案應該是-4.000000000000000E-007 : 但我跑出來的結果卻是 E0 =-4.000000000115023E-007 : 請問是哪邊出錯了呢 這是浮點運算的問題 可以查一下round off error或是數值分析課本第一章 粗略的說, 雙精度下(十進位)的有效位數是16位 所以在電腦裡 1234567890123456 ALO= 1.000000000000000 AL = 0.9999996000000000 AL-ALO=-0.000000400000000 有效位數大約只剩9位 (實際計算時是以二進位計算所以只能說大約) 剩下的那些位數基本上是不可信的 如果這樣程度的誤差會對你的計算有很大的影響的話 你可能要思考看看有沒有辦法避免讓兩個接近的數相減 -- The whole problem with the world is that fools and fanatics are always so certain of themselves, but wiser people so full of doubts. – Bertrand Russell -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.66.0.97

08/07 12:16, , 1F
可以查查Subtractive Cancellation Error 減性抵消誤差
08/07 12:16, 1F
文章代碼(AID): #1AUotOWs (Fortran)
文章代碼(AID): #1AUotOWs (Fortran)