看板Programming
标 题Re: [问题] 关於fotran数值运算的误差问题
发信站无名小站 (Mon Nov 6 23:11:44 2006)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ntu!news.ee.ttu!netnews.csie.nc
我不懂 fortran
但可能有两种原因只显示 0.00000
1.fortran 储存 real 只用不到 8 bytes(应该不太可能?)
2.write要设定显示科学记号表示法
※ 引述《[email protected] (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 讨论吧
> [email protected]
> 这种简单的问题讨论,
> 是会被 公干的
> ※ 引述《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海
1F:推 sky008888:有设定格式吗? F15.6之类的? 218.174.185.55 11/07 03:18
2F:→ sky008888:还有宣告的时候 有real*8 吗? 218.174.185.55 11/07 03:19
3F:→ sky008888:在不同的作业系对real的预设不太一样 218.174.185.55 11/07 03:20
4F:→ sky008888:小弟初步测试的结果认为和系统有关, 只 218.174.185.55 11/07 03:55
5F:→ sky008888:有准到小数後八位, 请把程式送到AIX这种 218.174.185.55 11/07 03:56
6F:→ sky008888:工作站跑跑看.... 218.174.185.55 11/07 03:56