Это отличная идея — избавиться от всех предупреждений, даже незначительных, хотя бы для того, чтобы при возникновении более серьезных проблем вы могли видеть их, а не загромождать вывод мелочами.
В этом случае предупреждающее сообщение достаточно ясное; вы назначаете двойное целое число. Встроенная функция dint
усекает, но не преобразует типы; поэтому вы присваиваете значение двойной точности, значение которого усекается до целого числа. Вы могли бы правильно заметить, что встроенная функция имеет сбивающее с толку название, но...
Если вы хотите выполнить преобразование, а также усечение, idint
фактически преобразуется в целое число.
Так, например, эта программа
program foo
integer :: nrev
double precision :: t_ref
t_ref = 1.
nrev = dint(t_ref)
end program foo
создает такое же предупреждение:
$ gfortran -o foo foo.f90 -Wall -std=f95
foo.f90:8.11:
nrev = dint(t_ref)
1
Warning: Possible change of value in conversion from REAL(8) to INTEGER(4) at (1)
Но этот хорош:
program foo
integer :: nrev
double precision :: t_ref
t_ref = 1.
nrev = idint(t_ref)
end program foo
как мы видим:
$ gfortran -o foo foo.f90 -Wall -std=f95
$
person
Jonathan Dursi
schedule
09.04.2012