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

看板Programming作者 (sjgau)時間18年前 (2006/11/07 09:26), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/5 (看更多)
program test real(kind=8) a, b, c a=0.100000000001*1D300 a= 0.100000000001D300 b=0.100000000000*1D300 b= 0.100000000000D300 c= a - b write(*,*) a-b, c end ! 1.000000283239953E+288 1.000000283239953E+288 ! Press any key to continue 上面,我只改動 a= , b= 就可以得到 原po 想要的結果 ※ 引述《jinming.bbs@bbs.wretch.cc (人生=無盡的任務)》之銘言: : 我不懂 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 : > 這種簡單的問題討論, : > 是會被 公幹的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.228.165.65
文章代碼(AID): #15J-3ZcA (Programming)
文章代碼(AID): #15J-3ZcA (Programming)