看板 Programming 關於我們 聯絡資訊
我不懂 fortran 但可能有兩種原因只顯示 0.00000 1.fortran 儲存 real 只用不到 8 bytes(應該不太可能?) 2.write要設定顯示科學記號表示法 ※ 引述《sjgau.bbs@ptt.cc (sjgau)》之銘言: > #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) > : 想了很久 我不知道遇到這種狀況要怎麼樣處理 > : 不知道板上的高手有沒有什麼好辦法可以解決 > : 希望可以幫我個忙 謝謝 -- 信言不美,美言不信 善者不辯,辯者不善 知者不博,博者不知 -- 夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子 之器不得已而用之恬淡為上勝而不美而美之者是樂殺人夫樂殺人者則不可得志於天下 矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以 喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫 之令而自均始制有名名亦既有夫亦將知止知止218-163-120-51.dynamic.hinet.net
sky008888:有設定格式嗎? F15.6之類的? 218.174.185.55 11/07 03:18
sky008888:還有宣告的時候 有real*8 嗎? 218.174.185.55 11/07 03:19
sky008888:在不同的作業系對real的預設不太一樣 218.174.185.55 11/07 03:20
sky008888:小弟初步測試的結果認為和系統有關, 只 218.174.185.55 11/07 03:55
sky008888:有準到小數後八位, 請把程式送到AIX這種 218.174.185.55 11/07 03:56
sky008888:工作站跑跑看.... 218.174.185.55 11/07 03:56