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)
不,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 岁以下人员或受酒精或其他影响表现的药物影响的人员操作。
| 归档时间: |
|
| 查看次数: |
4744 次 |
| 最近记录: |