2016-11-22 27 views
0

我正在使用舊的fortran腳本(可訪問here)。我收到以下警告(行號192,233-235)。有沒有辦法解決它?我在我的Mac上使用gfortran 6Gfortran警告:將REAL(8)轉換爲INTEGER(4)時的價值變化!

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] 
+0

分配到一個整數結果捨去小數部分也可能是幅度/溢出。 –

+0

使用標籤fortran獲得更多的關注。 –

回答

1

看起來變量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) 
+0

好點。我將編輯答案以反映這一點。謝謝! –