La respuesta correcta es la de Nemo anterior. Aquí solo estoy pegando un simple programa Fortran que muestra un ejemplo de los dos números, que necesitan 17 dígitos de precisión para imprimir, mostrando que uno necesita el formato (es23.16)
para imprimir números de doble precisión, si uno no quiere perder precisión :
program test
implicit none
integer, parameter :: dp = kind(0.d0)
real(dp) :: a, b
a = 1.8014398509481982e+16_dp
b = 1.8014398509481980e+16_dp
print *, "First we show, that we have two different 'a' and 'b':"
print *, "a == b:", a == b, "a-b:", a-b
print *, "using (es22.15)"
print "(es22.15)", a
print "(es22.15)", b
print *, "using (es23.16)"
print "(es23.16)", a
print "(es23.16)", b
end program
imprime:
First we show, that we have two different 'a' and 'b':
a == b: F a-b: 2.0000000000000000
using (es22.15)
1.801439850948198E+16
1.801439850948198E+16
using (es23.16)
1.8014398509481982E+16
1.8014398509481980E+16
He editado un poco tu programa. Ahora imprime los dos números de doble precisión diferentes: 1.8014398509481982e + 16 1.8014398509481980e + 16 ¡Muchas gracias, esta es la respuesta correcta! –
También publiqué un programa Fortran simple a continuación, que muestra que de hecho se necesitan 17 dígitos. –
Por cierto, aquí hay una manera simple de probar por qué necesitamos 17 dígitos: Si el doble más pequeño que se puede agregar a 1 es épsilon ~ 2e-16, entonces 1 + epsilon = 1.0000000000000002, que obviamente requiere 17 dígitos para representar. –