허수 부분이 매우 작 으면 확인해야하며 0 일 때 매우 작은 0이 아닌 허수 부분을 초래하는 일부 부동 소수점 오류를 제거하려면 0으로 설정해야합니다. 심지어이 문제에 대해 올바른 길을 갈거야 -복소수의 실수 부분을 0으로 설정하는 방법은 무엇입니까?
가 어떤 조언을 크게 감상 할 수있다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)
:
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
불행하게도 컴파일러 그냥 반환 다음과 같이
내 코드는?
업데이트 : 내가 사용하여 문제를 방지하기 위해 관리 :
if (aimag(kz2) < 0.0005) then
kz2 = real(kz2)
end if
if (aimag(kz1) < 0.0005) then
kz1 = real(kz1)
end if
그러나 나는 0이 아닌 양의 허수 부분을 설정하고자한다면 어떻게 하시겠습니까?
감사합니다. 정확히 내가 원하는 것 같습니다. 복잡한 변수를 할당 할 때 변수 나 표현식을 인수로 취할 수 없다고 생각하십니까? 저는 이전에 C/Python/Matlab에서 프로그래밍하는 데 익숙했습니다. 그래서 직접 할당이 아닌 함수를 사용하여 설정해야한다는 사실은 분명하지 않았습니다. 그런 사소한 질문에 사과드립니다. –
@AlexMcMurray : 예, 복잡한 할당을위한'(,)'표기법은 상수에만 적용됩니다. 컴파일시에 알려지지 않은 양을 사용하려면'cmplx' 함수가 필요합니다. 나는 이것을 포함하도록 내 대답을 업데이트 할 것이다. 이 답변으로 문제가 해결되면 [수락] (http://meta.stackexchange.com/a/5235/163653)을 고려해보십시오. – talonmies