复数 (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() 应该没问题。
是否有双精度复数的绝对值函数?当我尝试 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() 应该没问题。