复杂的CABS(x)函数(8)

时间:2015-03-23 22:43:39

标签: fortran

双精度复数值是否有绝对值函数?当我尝试CABS()时,我得到了

            V(1,j) = R(j,j) + (R(j,j)/cabs(R(j,j)))*complexnorm2(R(j:m,j))
  

"错误:参数的类型' a'打电话给出租车'在(1)应该是   COMPLEX(4),而不是COMPLEX(8)"

我在那里读过一个名为CDABS()的函数,但我不确定这是否是同一个东西?

3 个答案:

答案 0 :(得分:5)

没有理由使用除ABS()以外的任何其他内容。 FORTRAN 77中已经存在内在过程的泛型。您可以将它们用于所有内在数字类型。

如果要查看通用ABS()的可用特定函数的表,请参阅https://gcc.gnu.org/onlinedocs/gfortran/ABS.html,但它们最常用于作为实际参数传递。您可以看到CDABS()是非标准扩展程序,我不建议您使用它。

答案 1 :(得分:2)

CABS由标准定义,采用类型为default complex的参数。在您的实现中,这看起来像complex(kind=4)。没有标准函数CDABS,尽管您的实现可能提供一个:阅读相应的文档。

此外,对于采用ABS参数的泛型函数double complex,没有标准的特定函数。同样,您的实现可能会提供一个名为CDABS以外的其他内容。

也就是说,泛型函数ABS采用任何整数,实数或复数参数。使用它。

答案 2 :(得分:0)

COMPLEX * 8和复杂(KIND = 8)不一样。 第一个是4字节实数和4字节虚数。

复数(KIND = 8)或COMPLEX(KIND = C_DOUBLE)实际上是双精度实数和双精度虚数......因此相当于COMPLEX * 16。

如上所述ABS()应该没问题。