- 积分
- 6939
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-3-15
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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),不要把问题留给编译器。”
|
评分
-
查看全部评分
|