Мне нужно проверить, является ли мнимая часть очень маленькой, и установить ее на ноль, если это необходимо для устранения некоторых ошибок с плавающей запятой, которые приводят к очень маленьким ненулевым мнимым частям, когда она должна быть нулевой.1002 * Мой код выглядит следующим образом:
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
Но что бы я сделал, если бы я хотел установить мнимую часть на ненулевое значение?