小编Ale*_*ray的帖子

如何将复数的虚部设置为零?

我需要检查虚部是否非常小并将其设置为零,如果是为了消除一些浮点误差,当它应该为零时,会产生非常小的非零虚部.

我的代码如下:

kz2 = SQRT((n2*(2.0*PI*eta))**2 - kxarray(p)**2)
kz1 = SQRT((n1*(2.0*PI*eta))**2 - kxarray(p)**2)

if (aimag(kz2) < 0.0005) then
    kz2 = (REAL(kz2),0.0)
end if

if (aimag(kz1) < 0.0005) then
    kz1 = (REAL(kz1), 0.0)
end if
Run Code Online (Sandbox Code Playgroud)

不幸的是编译器只返回:

gaussian1.f90:122.18:

kz2 = (REAL(kz2),0.0)
                1
Error: Expected a right parenthesis in expression at (1)

gaussian1.f90:126.18:

kz1 = (REAL(kz1), 0.0)
                1
Error: Expected a right parenthesis in expression at (1)
Run Code Online (Sandbox Code Playgroud)

任何建议都将不胜感激 - 我是否正确地以正确的方式解决这个问题?

更新:我通过使用以下方法避免了这个问题:

if (aimag(kz2) < 0.0005) then
    kz2 = real(kz2)
end if

if (aimag(kz1) < …
Run Code Online (Sandbox Code Playgroud)

floating-point fortran complex-numbers

4
推荐指数
2
解决办法
4590
查看次数

标签 统计

complex-numbers ×1

floating-point ×1

fortran ×1