Gfortran警告:从REAL(8)到INTEGER(4)的转换中的值的变化!

时间:2016-11-22 17:45:48

标签: fortran gfortran

我正在使用旧的fortran脚本(可访问here)。我收到以下警告(第192,233-235行)。有办法解决吗?我在我的Mac上使用 gfortran 6

Ms-MacBook-Pro-2:~ Tonoy$ gfortran -g -fcheck=all -Wall mrtm.f
mrtm.f:192:8:

       N=COL/DX
        1
Warning: Possible change of value in conversion from REAL(8) to INTEGER(4) at (1) [-Wconversion]
mrtm.f:233:10:

       NKK=TPRINT/DT+0.50D0
          1
Warning: Possible change of value in conversion from REAL(8) to INTEGER(4) at (1) [-Wconversion]
mrtm.f:234:10:

       KLM=TTOTAL/DT+0.50D0
          1
Warning: Possible change of value in conversion from REAL(8) to INTEGER(4) at (1) [-Wconversion]
mrtm.f:235:9:

       KK=KLM/NKK+0.5D0
         1
Warning: Possible change of value in conversion from REAL(8) to INTEGER(4) at (1) [-Wconversion]

1 个答案:

答案 0 :(得分:2)

看起来变量N,NKK,KLM和KK都被隐式声明为整数。但是,赋值的右侧包含明确为REAL * 8的数字。基本上发生的事情是编译器正在将这些行的右侧评估为REAL * 8,然后尝试将结果值分配给整数。如果小数点后有任何非零数字,则它们将在此转换/分配中丢失。

在赋值中,编译器将忽略小数点和之后出现的任何数字。在许多旧的fortran代码中,这是预期的行为,因此代码正在按照预期的方式执行。

如果您只是想摆脱编译警告,可以使用INT封装赋值的右侧,即

N=INT(COL/DX)
NKK=INT(TPRINT/DT+0.50D0)
KLM=INT(TTOTAL/DT+0.50D0)
KK=INT(KLM/NKK+0.5D0)