主题:高分悬赏 EXP溢出问题
拜月贪狼
[专家分:20] 发布于 2011-07-15 11:07:00
看到“高分悬赏“有没有觉得很熟悉?没错又是我!O(∩_∩)O~
小弟的程序在运行过程中显示:
EXP: OVERFLOW
我的程序中只有一处使用了EXP函数
EXP(DELTA*FNORM)
其中,DELTA=1 FNORM=(YIELD-FDATM)/FDATM
FDATM=9903 YIELD 在其它的SUBROTINE中输入
对于EXP溢出的问题感觉很疑惑,EXP函数应该是定义在整个实数域上的。FORTRAN中规定EXP多大才算是溢出?
EXP的上限是多少?
各位朋友帮帮忙啊! 谢谢了
回复列表 (共9个回复)
沙发
yeg001 [专家分:14390] 发布于 2011-07-15 11:31:00
-_-! 如果计算机能表示整个实数域, 那为什么还计较单精度浮点, 双精度浮点呢?
单精度 正负3.4*10^38
双精度 正负1.79*10^308
数据网上找的,不想翻书了. 至于是不是那个位置出错调试一下看看就知道了.
板凳
dongyuanxun [专家分:7180] 发布于 2011-07-15 11:41:00
能给多少分,随便给个几万分吧
3 楼
yeg001 [专家分:14390] 发布于 2011-07-15 13:04:00
勋哥要当pfan水王?
4 楼
dongyuanxun [专家分:7180] 发布于 2011-07-15 13:09:00
这里积分和发帖数没关系啊
你也不开贴,随便给我加个几万分好了
5 楼
fortran2008 [专家分:750] 发布于 2011-07-15 13:16:00
[quote]-_-! 如果计算机能表示整个实数域, 那为什么还计较单精度浮点, 双精度浮点呢?
单精度 正负3.4*10^38
双精度 正负1.79*10^308
数据网上找的,不想翻书了. 至于是不是那个位置出错调试一下看看就知道了.
[/quote]
确实如此,关于exp函数要说明一下,如果算exp(300.0)肯定溢出,但exp(300d0)就不会。
如上,当为单精度时exp(88.0)能计算,exp(89.0)就溢出了。
当为双精度时exp(709d0)能计算,exp(710d0)就溢出了。
所以你这里的EXP(DELTA*FNORM)中的就是DELTA和FNORM要注意是单精度还是双精度,
当为单时DELTA*FNORM要小于88.0左右,否则会溢出;
当为双时DELTA*FNORM要小于709d0左右,否则会溢出。
6 楼
拜月贪狼 [专家分:20] 发布于 2011-07-15 15:53:00
要饭啊?不给
7 楼
fortran2008 [专家分:750] 发布于 2011-07-15 16:32:00
[quote]要饭啊?不给[/quote]
楼主讲得什么话?有点人情味好不!
8 楼
dongyuanxun [专家分:7180] 发布于 2011-07-15 16:54:00
lz也不想想fortran里根本就没exp这个实体函数
9 楼
yeg001 [专家分:14390] 发布于 2011-07-15 19:28:00
用的exp函数其实是"重载"后的函数(Generic), 会根据传递给函数的具体变量的类型自动调用相应的实体函数.
其实楼主以后提问不用标"高分悬赏"了.
因为这个分不是在你帐号上面划出来的. 我在小木虫求文献求书籍都是要把自己辛辛苦苦赚回来的金币悬赏的. 这样就不会随便求助,只有实在是找不到,学校没权限下载才申请.
这里的加分都是做楼主的随意加. 有时候1楼回帖已经帮到点子上了,但做楼主的有时候看不明白就不加. 其实很多时候只要有fortran基础应该能恍然大悟的.
我来回复