2014-05-19 2 views
-5

이 질문에 대한 답변이 아직 없습니다. 나는 그 문제에 대한 실제 또는 임의의 숫자를 포트란에서 올바르게 나타 내기 위해 노력하고 있습니다. gfortran이 나를 위해 무엇을하고있는가는 길입니다. 예를 들어 변수 REAL pi = 3.14159를 선언 할 때 fortran은 3.14159000이라고 말하기보다는 pi = 3.14159012를 인쇄합니다. 아래를 참조gfortran REAL 소수로 8 자릿수가 정확하지 않습니다.

PROGRAM Test 
IMPLICIT NONE 
REAL:: pi = 3.14159 
PRINT *, "PI = ",pi 
END PROGRAM Test 

이 인쇄 :

PI = 3.14159012 

내가 기대했을 수도 PI = 3.14159000 진짜 적어도 소수점 8 자리로 정확한 있어야하는데로 같은.

+0

Google 부동 소수점 – agentp

+3

동일한 질문을 다시하지 마십시오. 먼저 폐쇄 버전에서 크게 수정해야합니다. 이미 배정도 산술을 사용하라는 제안을 받았습니다. –

답변

-3

마지막 두 자릿수는 오류가있는 것이 일반적입니다. 부동 소수점 오류라고합니다.

확인이 : 주 1 - 2 강 : 바이너리 저장 및 버전 관리/고정 및 부동 소수점 실수 (9-08) .MP4 , 내가 좋은 기분이야 https://class.coursera.org/scicomp-002/lecture

+2

coursera 계정이 있고 해당 코스를 구독 한 사용자 만 액세스 할 수 있습니다. 무언가를 찾으십시오. –

4

@ 너무 나는이 질문에 답하려고 노력할 것인데, 이는 쉽게 검색 될 수있는 기본 지식이다. (이미이 질문과 이전 질문에 대한 주석에서 지적한 바와 같다.)


운좋게도 Fortran은 부동 소수점 숫자를 이해하기 위해 몇 가지 흥미로운 내장 함수를 제공합니다.

8 자릿수는 엄지 손가락이며 가장 작은 편차를 인쇄하는 EPSILON(x)과 관련 될 수 있으며 선택한 모델 (예 : REAL4) 내에서 표시 될 수 있습니다. 이 값은 실제로 1.19e-7입니다. 즉, 8 번째 숫자가 틀릴 가능성이 큽니다. 나는 어떤 숫자가 정확하게 나타낼 수 있기 때문에 가장 가능성이 높습니다.

PI의 경우, 내재적 인 SPACING(PI)을 사용하여 표현 가능한 가장 작은 편차를 인쇄 할 수 있습니다. 이것은 2.38e-7의 값을 나타내며, 이는 엡실론보다 약간 크며 여전히 7 자리를 허용합니다.

이제 PI 값이 3.14159012으로 저장되는 이유는 무엇입니까? 부동 소수점 숫자를 저장할 때 항상 가장 가까운 표현 가능한 숫자를 저장합니다. 간격 값을 사용하여 pi에 가능한 값을 얻을 수 있습니다. 가능한 숫자와 3.14159 당신의 가치에 대한 그들의 차이점은 다음과 같습니다

3.14158988   1.20E-007 
3.14159012  -1.18E-007 
3.14159036  -3.56E-007 

당신이 볼 수 있듯이이 3.141590123.14159에 가장 가까운 가능한 값 때문에 저장 및 인쇄됩니다.