Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gfortran警告:从实数(8)转换为整数(4)时值发生变化!_Fortran_Gfortran - Fatal编程技术网

Gfortran警告:从实数(8)转换为整数(4)时值发生变化!

Gfortran警告:从实数(8)转换为整数(4)时值发生变化!,fortran,gfortran,Fortran,Gfortran,我正在使用一个旧的fortran脚本(可访问)。我收到以下警告(第192233-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)

我正在使用一个旧的fortran脚本(可访问)。我收到以下警告(第192233-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]

看起来变量N、NKK、KLM和KK都隐式声明为整数。然而,赋值的右侧包括显式实数*8的数字。因此,本质上,编译器正在将每一行的右边计算为实数*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)

看起来变量N、NKK、KLM和KK都隐式声明为整数。然而,赋值的右侧包括显式实数*8的数字。因此,本质上,编译器正在将每一行的右边计算为实数*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)

将浮点赋值给整数会导致分数部分的截断,也可能导致幅值/溢出。使用tag fortran可获得更多关注。将浮点赋值给整数会导致分数部分的截断,也可能导致幅值/溢出。使用tag fortran可获得更多关注。