포트란 코드를 작성할 때 kind=8
또는 double precision
을 할당하여 실제 변수를 선언하는 것은 배정 밀도를 보장하는 한 가지 방법입니다. 또 다른 방법은 코드에서 명시 적으로 선언하지 않고 컴파일 옵션 (예 : -r8
(ifort))을 사용하는 것입니다.코드 지정 배정 밀도와 컴파일러 옵션 배정 밀도의 차이
둘 사이에 차이가 있습니까?
포트란 코드를 작성할 때 kind=8
또는 double precision
을 할당하여 실제 변수를 선언하는 것은 배정 밀도를 보장하는 한 가지 방법입니다. 또 다른 방법은 코드에서 명시 적으로 선언하지 않고 컴파일 옵션 (예 : -r8
(ifort))을 사용하는 것입니다.코드 지정 배정 밀도와 컴파일러 옵션 배정 밀도의 차이
둘 사이에 차이가 있습니까?
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(...)
)에 따라 상수 값을 설정하십시오.
내 생각에 코드가'-r8'과 같은 특정 컴파일러 옵션에 의존하지 않는 것이 더 좋습니다. – steabert