2014-06-21 3 views
1

포트란 코드를 작성할 때 kind=8 또는 double precision을 할당하여 실제 변수를 선언하는 것은 배정 밀도를 보장하는 한 가지 방법입니다. 또 다른 방법은 코드에서 명시 적으로 선언하지 않고 컴파일 옵션 (예 : -r8 (ifort))을 사용하는 것입니다.코드 지정 배정 밀도와 컴파일러 옵션 배정 밀도의 차이

둘 사이에 차이가 있습니까?

+2

내 생각에 코드가'-r8'과 같은 특정 컴파일러 옵션에 의존하지 않는 것이 더 좋습니다. – steabert

답변

5

Carefuly이 100 % 중복이 아니지만 이것을 읽으십시오 : Fortran: integer*4 vs integer(4) vs integer(kind=4)Fortran 90 kind parameter.

kind=8은 휴대용이 아니며 일부 컴파일러에서는 작동하지 않으며 초보자에게도 가르쳐주지 않습니다. 이는 한 Coursera 과정에서도 볼 수 있지만 형사 처벌을 받아야합니다.

다른 효과를 가진 다른 컴파일러 옵션이 있습니다. 모두 4 바이트 실수 또는 정수를 8 바이트 정수로 승격합니다. 기타 기본값은 8로 설정됩니다. 이로 인해 저장소에 대한 몇 가지 표준 가정과 기본 유형보다 많은 것을 보유 할 수있는 double precision이 나옵니다. 예를 들면 다음과 같습니다.

-fdefault-real-8 

기본값을 8 바이트 실수로 설정합니다. 이것은 완전히 동일하지 않습니다 :

-freal-4-real-8 

모든 4 바이트 실제를 8 바이트로 승격합니다. 차이점을 이해하는 데주의를 기울여야하며 일반적으로 이러한 옵션을 사용하는 것은 좋지 않습니다.

권장 솔루션을 사용하여, 항상 동일 상수 이름 :

integer, parameter :: rp = ... 

항상 당신이 상수의 이상을 가질 수

real(rp) :: x 

를 사용합니다. 참조 된 질문 (real64, kind(1.d0), selected_real_kind(...))에 따라 상수 값을 설정하십시오.