早教吧 育儿知识 作业答案 考试题库 百科 知识分享

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

题目详情
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),不要把问题留给编译器.