저장값의 범위
integer, real data type의 저장값의 범위
Data Type과 자료값의 범위(with 32bit machine)
Data byte range significant etc
type
Integer 1 -128 ~ 127 3
2 -32,768 ~ 32,767 5
4 -2,147,483,648 ~ 2,147,483,647 10 default
8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 19
Real 4 1.18E-38 ~ 3.40E38 6 ~ 7 default
8 2.23E-308 ~ 1.79E308 15 ~ 16
16 1.0E-4391 ~ 1.0E4392 about 33
선언방법
INTEGER (KIND = 2):: A ! 2 byte정수 선언
REAL (KIND = 8) :: B ! 8 byte 실수 선언
위의 저장값은 컴퓨터가 32bit, 64bit 인가에따라 다름. 컴파일러에 따라 다름
프로그램의 이동성을 높이기 위하여 저장값의 범위를 명시적으로 선언하는 방법
INTEGER, PARAMETER :: Prec15 = SELECTED_REAL_KIND(15, 307)
REAL (KIND = Prec15) :: A
15자리 십진수의 정확도와 -1.0E307 ~ 1.0E307까지의 범위의 실수를 저장
INTEGER, PARAMETER :: Range20 = SELECTED_INT_KIND(20)
INTEGER (KIND = Range20) :: B
20자리수까지 가질 수 있는 정수형 변수 선언
단정도(single precision)변수를 배정도(double precision)에 저장할 때 생기는 문제
PROGRAM Signi
IMPLICIT NONE
REAL :: X
INTEGER, PARAMETER :: DP = SELECTED_REAL_KIND(14)
REAL(KIND = DP) :: A, B
X = 0.1 ! single precision
B = 0.1_DP ! double precision
PRINT '(1X, A)', " 1234567890123456789"
A = X ! single -> double
PRINT '(1X, F19.17)', A
A = B ! double -> double
PRINT '(1X, F19.17)', A
END PROGRAM Signi
위 소스를 09_01_Signi.f95 로 저장
소스 컴파일 및 프로그램 실행