Re: [問題] 計算的精準度問題
※ 引述《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
08/07 12:16, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章