Реальный тип по умолчанию не обладает достаточной точностью.
program test
implicit none
integer, parameter :: i10 = selected_int_kind(10)
integer, parameter :: r15 = selected_real_kind(15)
integer(kind=i10):: i
real :: r
real(kind=r15) :: s
i=17159401
r = i
print *, 'default real kind: r', r, 'r+1', r+1, 'r-1', r-1
s = i
print *, 'r15 real kind: s', s, 's+1', s+1, 's-1', s-1
end program test
Вывод, который я получаю:
default real kind: r 17159400.0 r+1 17159400.0 r-1 17159400.0
r15 real kind: s 17159401.000000000 s+1 17159402.000000000 s-1 17159400.000000000
Приведенный выше результат означает, что 1 ниже точности переменных с плавающей запятой с типом по умолчанию. Я выбрал более точный вид (r15
здесь), который будет достаточно точным для ваших нужд во второй строке.