爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3165|回复: 4

[经验总结] 幂函数计算数学阈值超出报错

[复制链接]

新浪微博达人勋

发表于 2014-11-9 10:00:38 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 咕噜 于 2014-11-9 10:20 编辑

FORTRAN5.0最近写程序,用到EXP指数和幂函数,但是经常会报错,runtime error M6201:math -exp domain error,runtime error M6201:math -** domain error。本来觉得指数和幂函数定义域应该是正无穷到负无穷的,后来屡试屡败,发愁求助万能的百度,发现一个很好的答案,最新版本不知道,但5.0版本以下的Fortran计算幂函数是按照 exp[a*log(x)]来的,即x的定义域在(0,正无穷),所以有时候出现不明报错有可能是求幂函数时x为负了。百度用户“电灯剑客”的原话如下:
“主要因为幂函数x**a是定义在[0,+无穷)上的,在Fortran77中除了特殊的指数a之外x**a一般都按照exp(a*log(x))来实现。
如果x.GE.0.0D0,那么x**(1.0D0/3.0D0)当然没什么问题。
如果x.LT.0.0D0,Fortran是不会知道x**(1.0D0/3.0D0)是开三次方的意思,何况1/3在计算机中不能精确表示,所以上面的乘方运算其实还是按照指数和对数复合的方式来实现的,但是此时log(x)是多值函数,在计算机中一般不会允许x是负数的情形,这样可以避免取单值支的麻烦。
对于你说的开立方根这个问题,解决的办法是用-(-a)**(1.0D0/3.0D0)来代替a**(1.0D0/3.0D0),不要把问题留给编译器。”

评分

参与人数 1金钱 +15 贡献 +2 体力 +40 收起 理由
言深深 + 15 + 2 + 40

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-11-9 10:37:48 | 显示全部楼层
还是把问题讲的透彻了,要是文本部分稍微编辑一下就更好了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-11-9 19:17:11 | 显示全部楼层
言深深 发表于 2014-11-9 10:37
还是把问题讲的透彻了,要是文本部分稍微编辑一下就更好了。

慢慢进步
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-11-9 21:52:32 来自手机 | 显示全部楼层
谢谢分享!!!!!!!!!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2014-11-9 21:56:10 | 显示全部楼层

谢谢分享!!!!!!!!!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表