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

CABS(x) function for complex(8)

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

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

"Error: Type of argument 'a' in call to 'cabs' at (1) should be COMPLEX(4), not COMPLEX(8)"

我读到有一个名为 CDABS() 的函数,但我不确定那是否是同一回事?

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

如果您想查看泛型 ABS() 的可用特定函数的 table,请参阅 https://gcc.gnu.org/onlinedocs/gfortran/ABS.html,但它们最有用的只是作为实际参数传递。可以看到CDABS()是一个非标准的扩展名,我不建议使用它。

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

此外,对于采用 double complex 参数的通用函数 ABS 没有标准的特定函数。同样,您的实施可能会提供一个不同于 CDABS.

的名称

也就是说,通用函数 ABS 接受任何整数、实数或复数参数。用那个。

COMPLEX*8 和 complex(KIND=8) 不一样。 第一个,是4字节实部和4字节虚部。

复数(KIND=8) or COMPLEX(KIND=C_DOUBLE)其实是双精度实数和双精度虚数...所以等价于COMPLEX*16.

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