Fortran 中复数的绝对值平方

nor*_*rio 2 math fortran arithmetic-expressions

Fortran 中有一个内在函数来计算复数|z|^2的平方模吗z

如果没有,是否有比以下更简单或更好的计算方法?

REAL(z, precision_specifier)**2 + AIMAG(z)**2
Run Code Online (Sandbox Code Playgroud)

Hig*_*ark 6

不,Fortran 标准没有定义这样的内部例程。据我所知,目前广泛使用的编译器也没有提供这样的例程。

如果OP确实想避免昂贵的 sqrt,并且不喜欢她现有的解决方案,OP可以尝试:

real :: rslt
real, dimension(2) :: parts
complex :: z
...
parts = transfer(z, parts)
rslt = dot_product(parts, parts)
Run Code Online (Sandbox Code Playgroud)

或者,给出相同的声明,这可能是首选

rslt = dot_product(transfer(z, parts), transfer(z, parts))
Run Code Online (Sandbox Code Playgroud)

与往常一样,如果性能对您很重要,请对其进行衡量。

更简单还是更好?你决定。

一如既往,transfer不得由 18 岁以下人员或受酒精或其他影响表现的药物影响的人员操作。