双精度复数值是否有绝对值函数?当我尝试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()
的函数,但我不确定这是否是同一个东西?
答案 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()应该没问题。