fortran77 中为什么不能像正数那样求负数的三次方根,该怎么求?谢谢!

如题所述

主要因为幂函数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个回答  2012-03-24
ifort 没问题,gfortran不行。

fortran77 中为什么不能像正数那样求负数的三次方根,该怎么求?谢谢!
主要因为幂函数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在计算机中不能精...

相似回答
大家正在搜