gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:20:09 25 4
gpt4 key购买 nike

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

我的代码如下:

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

不幸的是,编译器只返回:
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)

任何建议将不胜感激 - 我什至以正确的方式解决这个问题吗?

更新:我设法通过使用来避免这个问题:
if (aimag(kz2) < 0.0005) then
kz2 = real(kz2)
end if

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

但是,如果我想将虚部设置为非零值,我该怎么办?

最佳答案

在 Fortran 2008 中,还有更多的可能性。您可以访问实部和虚部作为派生类型组件,例如

   a = c%re
b%im = 5

因此,要设置 z 的虚部在新编译器中为零,您可以尝试 z%im = 0 .

关于floating-point - 如何将复数的虚部设置为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9735559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com