我需要检查虚部是否非常小,如果是,则将其设置为零,以便消除一些浮点错误,这些错误会导致在应该为零的情况下产生非常小的非零虚部。
我的代码如下:
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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)