Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math Fortran中的负指数_Math_Fortran - Fatal编程技术网

Math Fortran中的负指数

Math Fortran中的负指数,math,fortran,Math,Fortran,非常基本的Fortran问题。下面的函数返回一个NaN,我似乎不明白为什么: F_直径=1(2.71828**(-1.0*(-1./30.**1.4)) 我喂了2.71。。。在中而不是使用exp(),但它们都以相同的方式失败。我注意到,只有当小数部分(-1/30)为负时,才会得到NaN。积极的评价是好的 非常感谢问题是你在取一个负数的根,这会给你一个复杂的答案。如果你想象一下,这一点会更明显 (-1) ** (3/2) 这相当于 (1/sqrt(-1))**3 换句话说,分数指数不能简单地对

非常基本的Fortran问题。下面的函数返回一个NaN,我似乎不明白为什么:

F_直径=1(2.71828**(-1.0*(-1./30.**1.4))

我喂了2.71。。。在中而不是使用
exp()
,但它们都以相同的方式失败。我注意到,只有当小数部分(-1/30)为负时,才会得到NaN。积极的评价是好的


非常感谢

问题是你在取一个负数的根,这会给你一个复杂的答案。如果你想象一下,这一点会更明显

(-1) ** (3/2)
这相当于

(1/sqrt(-1))**3

换句话说,分数指数不能简单地对负数进行运算。

我今天学到了另一个有趣的点,我想补充一下ire_和_诅咒的答案:fortran编译器似乎可以通过连续乘法计算整数的幂。 比如说

      PROGRAM Test
      PRINT *, (-23) ** 6
      END PROGRAM
工作正常,并给出
148035889
作为答案

但是对于
实数
指数,编译器使用对数:
y**x=10**(x*log(y))
(今天的编译器可能会有不同的做法,但我的书中是这么说的)。现在,负对数给出了一个复杂的结果,这不起作用:

      PROGRAM Test
      PRINT *, (-23) ** 6.1
      END PROGRAM
甚至给出了一个编译器错误:

Error: Raising a negative REAL at (1) to a REAL power is prohibited

从数学的角度来看,这个问题似乎也很有趣:

这个问题似乎是-1/30**1.4;显然,gfortran无法将负数提高到分数次幂。不知道为什么。愤怒和诅咒给出了一个很好的答案。请注意,这应该是所有Fortran编译器的标准行为-因为Fortran是静态类型的,在对其进行操作时,REAL不能变为COMPLEX-但它会引发异常。这是因为Fortran标准中明确禁止引用错误消息。它实际上与实现无关<代码>(-23)**6.0也是不允许的。事实上,整数指数是。