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 로 저장

소스 컴파일 및 프로그램 실행




'Programming > Fortran' 카테고리의 다른 글

Pointer and Linked List  (0) 2008.10.01
컴퓨터 사용 기록 검색(Derived types and structures)  (0) 2008.09.30
다차원배열  (0) 2008.09.25
빈도구하기  (0) 2008.09.25
신속정렬(Quick Sort)  (0) 2008.09.22

+ Recent posts