2016-11-23 6 views

답변

3

복합물 * 16은 포트란이 아닙니다 (90 또는 이전 또는 이후). 데이터 유형이 복합 (real64) (또는 비표준 컴플렉스 * 16) 인 경우 표준 일반 exp()는 해당 정밀도와 범위를 선택합니다.

2

여기서 각 부분 (실수 및 가상)은 64 비트입니까?

당신이 COMPLEX (KIND = 8) (인텔)이라고 말하면 각각의 실수와 허수에 대해 64 비트를 얻습니다. 나는 '직접보고'다음 ISO_C_BINDING를 사용하는

그것은 가장 (나는 대부분의 휴대용 생각) 할 수 있습니다 ...주는 무슨 gfortran 볼 필요합니다 :

포트란 77 년 이후 거의가
PROGRAM ABC 
USE ISO_C_BINDING 
IMPLICIT NONE 

COMPLEX(KIND=C_FLOAT_COMPLEX) :: A 
COMPLEX(C_DOUBLE_COMPLEX)  :: B 
COMPLEX(C_LONG_DOUBLE_COMPLEX) :: C 

WRITE(*,*) SIZEOF(A)=',SIZEOF(A) 
WRITE(*,*) SIZEOF(B)=',SIZEOF(B) 
WRITE(*,*) SIZEOF(C)=',SIZEOF(C) 

END PROGRAM ABC 
+0

컴플렉스의 각 부분에 대해 64 비트 저장 공간을 원하면'use iso_fortran_env, only : real64; 복합체 (kind = real64) z; 끝 '이 최선의 방법 일 수 있습니다. 그러나 이것은 그러한 가치를 어떻게 과장하는지에 대한 질문을 실제로 다루지는 않습니다. – francescalus

+0

나는 잘 모르겠다. 몇 달 동안 포트란에서 코드를 작성하고 이전 코드에서 배웠습니다 ... 그래서 기본적으로 실제로 무엇이 실제로 수행되는지를 모르고 복잡한 변수를 복잡한 것으로 선언합니다. – mwoua

+1

컴플렉스 * 16은 ibm360 fortran66의 캐리 오버입니다. 그것은 실제와 가상에 대해 각각 8 바이트를 의미하므로 작동하는 곳은 complex (real64)와 같습니다. Real64는 언급 된 컴파일러의 가치가 8입니다. – tim18

2

인수로 전달하지 않는 한 DEXP()을 직접 사용해야합니다.

정규 표현식 (일반적으로 가장 많이 사용하는 것으로, 아마도 당신의 경우)에서는 모든 지수에 generic EXP()을 사용하십시오.

드문 경우로 DEXP()이 함수에 인수로 전달 된 경우 해당하는 요소가 없으므로 generic EXP()을 호출하는 래퍼 함수를 ​​작성해야합니다.