2016-07-24 44 views
0

実数の乗算イベントを含むコードがあります。入力変数に関係なく、その特定のサブルーチンに対して常に答えがゼロになります。実数の乗算

すべての変数は、宣言された型であり、値は、例えば、。 a = 5、b = 3.5 & c = 0.0005。

私はより明確になると、おそらくいくつかのデバッグを使用し ...う、私はおそらく

Subroutine Load_Modulation_100() 

Real*4 :: Te  
Real*4 :: Ee  
Real*4 :: Et  
Real*4 :: QLHV  
Real*4 :: mfg  
Real*4 :: Qfeul 
Real*4 :: mf  
Real*4 :: Pe  
Real*4 :: Pt 

Te  = 100 
Ee  = 28.2 
mf  = 0.0005 
QLHV = 47141 
Et  = 66.8  
Cpfg = 4.5 

      Qfeul = (mf * QLHV) 
      Pe = (Qfeul * (Ee/100)) 
      Pt = (Qfeul * (Et/100)) 

Write (*,*) Pe, 'kW' 
Write (*,*) Pt, 'kW' 

End Subroutine Load_Modulation_100` 
+0

それぞれのサブルーチンサンプルで質問を更新しました。 – Yousaf

+0

私は 'gfortran'でエラーを再現できません - おそらくPlato固有ですか? – chw21

+0

変数のいくつかが宣言されていない場合は0になると想像することができますが、あなたの例ではそうではありません。 –

答えて

0

ない

`ケースをプラトンIDE

を使用していますが、整数の切り捨てが問題になることがあります。

Subroutine Load_Modulation_100() 
IMPLICIT NONE 
Real*4 :: Te  
Real*4 :: Ee  
Real*4, PARAMETER :: Et = 66.8E0 
Real*4 :: QLHV  
Real*4 :: mfg  
Real*4 :: Qfeul 
Real*4 :: mf  
Real*4 :: Pe  
Real*4 :: Pt 
LOGICAL*4 :: IO = .TRUE. 

! Te  = 100 ! This is a float, it just does;t jump off the page as one 
Te  = 100.0E0 ! 
Ee  = 28.2 
mf  = 0.0005 
QLHV = 47141 ! This is a float, it just does't jump off the page as one 
!Moved to parameter Et  = 66.8  
Cpfg = 4.5 

    IF(IO) WRITE(*,*)' (Ee/100)=', (Ee/100) 
     Qfeul = (mf * QLHV) 
!  Pe = (Qfeul * (Ee/100)) 
     Pe = (Qfeul * (Ee/FLOAT(100))) 
!  Pt = (Qfeul * (Et/100)) 
     Pt = (Qfeul * (Et/100.0E0)) 

Write (*,*) Pe, 'kW' 
Write (*,*) Pt, 'kW' 

RETURN 
End Subroutine Load_Modulation_100!` 
+0

私はこれらの線に沿って考えていました。しかし、Teは「100.0」と定義する必要はなく、「100」だけでも問題ありません。しかし、EeやEtが「本物」と宣言されていてもそれが大きな問題になるのであれば、 –

+0

使用されているサブルーチンの内部で変数を宣言する必要があります。以前のサブルーチンからの変数を、現在のサブルーチンで再び宣言することなく使用することはできませんか? – Yousaf

+0

@ArslanYousafいいえ、できません。モジュールを使用する必要があります。 **あなたはあなたの質問で次回実行している**正確な**コードを表示する必要があります**。 –