2014-07-20 4 views
-1

Fortran 클래스의 출력 형식 지정 일 동안 잠들었을 것입니다. 왜냐하면 이러한 결과가 나에게 당황 스럽기 때문입니다.gfortran의 이상한 출력 결과

65245.6523 
01,235,164에

65246512.0 

이 프로그램

program f1 
    real :: x=65245.6525 
    write(*,*) x 
end program f1 

결과에 gfortran 4.6,

이 프로그램

program f1 
    real :: x=65246514 
    write(*,*) x 
end program f1 

결과를 사용하여 분명히

65226544.0000 

에서 마지막으로

,이 프로그램

program f1 
    real :: x=65226545.6525 
    write(*,'(F14.4)') x 
end program f1 

결과는 콘솔 출력은 x에 할당되는되지 않은 것. 거기에 몇 가지 한정된 정밀도의 결과가 이것을 일으키는가?

답변

1

변수와 상수는 단 정밀도이며 약 7 자리의 십진수 만 사용할 수 있습니다. real64로 지정된 ISO 포트란 환경 통해 배정도 번호, 즉, 64 비트를 사용

program f1 
    use, intrinsic :: ISO_FORTRAN_ENV 
    implicit none 
    real :: x=65226545.6525 
    real (real64) :: y=65226545.6525_real64 
    write(*,'(F14.4)') x 
    write(*,'(F14.4)') y 
end program f1 

:에 비교. real64도 상수에 사용됩니다. 그렇지 않으면 단 정밀도 상수로 평가 된 다음 배정 밀도 변수 y에 저장됩니다. (더 많은 자릿수가 필요하면 quadrupole 정밀도 인 real128을 사용할 수 있습니다.

+0

real128은 (적어도 IEEE 의미에서) 4 배 정밀도입니다. –

+0

매우 사실입니다. 답변이 업데이트되었습니다. –