Re: [問題] 關於fotran數值運算的誤差問題

看板Programming作者 (sjgau)時間18年前 (2006/11/06 11:45), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/5 (看更多)
#include "stdafx.h" #include <math.h> int main(int argc, char* argv[]) { double a, b, c; printf("\nsizeof(c)= %d bytes\n", sizeof(c)); a=0.100000000001e300; b=0.100000000000e300; c= a - b; printf("\nc= %25.22le\n", c); return 0; } /* sizeof(c)= 8 bytes c= 1.0000002832399531000000e+288 Press any key to continue */ 手邊暫時 沒有 fortran 的 compiler 先使用 對等的 C 幫你看看 你 看看那個 c 的答案 是否為你 所要的, 然後,私下用 e-mail 討論吧 sjgau4311@gmail.com 這種簡單的問題討論, 是會被 公幹的 ※ 引述《jas2902 (..)》之銘言: : 我想要請教板上的高手 關於fortran數值計算上面的誤差問題 : 參考下面這個簡單的程式 : -------------------------------- : program test : real(kind=8) a, b : a=0.100000000001*1D300 : b=0.100000000000*1D300 : write(*,*) a-b : end test : -------------------------------- : 我發現在螢幕上顯示出來的結果是: : 0.0000000000000000 : 但實際的結果應該是: : 0.000000000001*10^300=10^288 : 誤差差了 10^288 ! : 因為類似這樣的計算誤差 : 讓我在計算量子力學裡面穿透機率的問題 : 在某些點發生了機率大於1的狀況(機率一定會小於1) : 想了很久 我不知道遇到這種狀況要怎麼樣處理 : 不知道板上的高手有沒有什麼好辦法可以解決 : 希望可以幫我個忙 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.228.165.65
文章代碼(AID): #15Jg_VnR (Programming)
文章代碼(AID): #15Jg_VnR (Programming)