Re: [問題] 關於fotran數值運算的誤差問題
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章