Есть ли лучшее назначение двойной точности в Fortran 90?

В Fortran 90 (используя gfortran в Mac OS X), если я присваиваю значение переменной с двойной точностью без явной привязки к типу, точность не " взять. " Я имею в виду, что если я запускаю следующую программу:

program sample_dp

implicit none

integer, parameter :: sp = kind(1.0)
integer, parameter :: dp = kind(1.0d0)

real(sp) :: a = 0.
real(dp) :: b = 0., c = 0., d = 0.0_dp, e = 0_dp

! assign values
a = 0.12345678901234567890
b = 0.12345678901234567890
c = DBLE(0.12345678901234567890)
d = 0.12345678901234567890_dp

write(*,101) a, b, c, d
101 format(1x, 'Single precision: ',  T27, F17.15, / &
           1x, 'Double precisison: ', T27, F17.15, / &
           1x, 'Double precision (DBLE): ', T27, F17.15, / &
           1x, 'Double precision (_dp): ',  T27, F17.15)

end program

Я получаю результат:

Single precision:        0.123456791043282
Double precision:        0.123456791043282
Double precision (DBLE): 0.123456791043282
Double precision (_dp):  0.123456789012346

Результат с одинарной точностью начинает округляться до 8-го десятичного знака, как и ожидалось, но только переменная двойной точности, которую я явно назначил с помощью _dp, сохраняет все 16 цифр точности. Это кажется странным, поскольку я ожидал (я относительно новичок в Фортране), что переменная с двойной точностью автоматически будет иметь двойную точность. Есть ли лучший способ назначить переменные двойной точности, или мне нужно явно вводить их, как указано выше?

6
задан tomshafer 26 May 2011 в 22:50
поделиться