作者endpeople (你要幸福ㄛ...)
看板Fortran
標題[問題] 關於最大有效位數...
時間Thu Apr 15 20:44:07 2010
各位好...我用的是CVF6.5版本...
最近遇到了一個運算上的問題...
Fortran的最大有效位數為16位數...
假設今天有一個很大的整數其位數為10^16...
乘上一個介於0~1之間的小數(精確到小數點後16位數)...
那麼結果的有效位數最多只能精確到個位數...小數點後的值就會有誤差...
如果那很大的整數再大於10^16...
結果的精確位數可能只到十位數甚至只有百位數...
例如:a=10d16 , b=3.d0 , c=7.d0
d=b/c=0.42857142857142854763807...
^(有效精確位數)
e=a*d=42857142857142856.00000000
^(有效精確位數)
即使事先將那很大的值取log轉換運算...
但最後再取回exp後一樣只能精確到個位數(甚至更差)...
不知各位高手...這樣的問題有沒有辦法解決呢??
謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.13.113.185
※ 編輯: endpeople 來自: 163.13.113.185 (04/15 20:47)
1F:→ motoman:原po要不要貼部份code來討論看看? 我認為是資料型態混合的 04/15 21:07
2F:→ motoman:運算造成的錯誤 講簡單點 單精度和雙精度一起加減乘除 04/15 21:08
3F:→ motoman:後面的值就會有問題 因為兩者的資料儲存方式不同 04/15 21:09
4F:→ motoman:sorry 沒注意到原po有寫@@ 雙精度的確是準到15位 04/15 21:18
5F:→ motoman:那樣是正常的 (上面三行推文當我沒說 鬼打牆) 04/15 21:21
7F:→ latinboy: 使用浮點數最最基本的觀念 by 冼鏡光 04/15 22:08
8F:→ latinboy:要做數值的人 上一篇文章先讀到懂 問題就少很多 :) 04/15 22:09
9F:→ endpeople:那篇文章我前幾天有看過了...似乎無法解決我的問題... 04/15 22:49
11F:→ perceval:High-Precision Software 04/16 00:23
12F:推 latinboy: 不知道你是做什麼問題需要這麼準 XD 算PI嗎??? 04/16 20:49
13F:→ latinboy: 如果有效位數只要16~20 你可以試著用64bits整數換算 04/16 20:50
14F:→ latinboy: 如果需要很多位數 試試大數運算吧 04/16 20:50