[問題] 精確度的問題

看板Fortran作者 (3321)時間14年前 (2010/08/30 16:34), 編輯推噓1(107)
留言8則, 3人參與, 最新討論串1/1
我有一個算式 想要取到小數點5位數 以後捨去或是四捨5入 例如 a=0.123456789 變成 a=0.123450000 或是 a=0.123460000 目前測試程式是 program tt123 implicit none real e,f e=0.123456789 f=e write(*,*) e,f f=f+1000 write(*,*) e,f f=f-1000 write(*,*) e,f end program tt123 結果是 0.1234568 0.1234568 0.1234568 1000.123 0.1234568 0.1234741 Press any key to continue 不是我想要的0.1230000 不知如何改才OK -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.77.208 ※ 編輯: jubilee2 來自: 140.116.77.208 (08/30 16:35) ※ 編輯: jubilee2 來自: 140.116.77.208 (08/30 16:36)

08/30 16:37, , 1F
所以要4捨5入還是直接捨去
08/30 16:37, 1F

08/30 16:43, , 2F
因為我的程式需要疊帶百萬次以上 所以這些誤差會很嚴重
08/30 16:43, 2F

08/30 16:44, , 3F
直接捨去最好
08/30 16:44, 3F

08/30 16:53, , 4F
自解..要用INT當中繼站才能轉換成功
08/30 16:53, 4F

08/30 16:58, , 5F
*1000後取整數部分即可
08/30 16:58, 5F

08/30 16:58, , 6F
取完整數把1000除回去
08/30 16:58, 6F

08/30 19:34, , 7F
fortran 的 default real 是 *4, 精確度只有 5 - 6位
08/30 19:34, 7F

08/30 19:35, , 8F
請改用 real*8, 然後,相關的系統函數呼叫,要使用 dsin()
08/30 19:35, 8F
文章代碼(AID): #1CUsqBjF (Fortran)
文章代碼(AID): #1CUsqBjF (Fortran)