2016-07-24 103 views
0

我有一個包含一些實數乘法事件的代碼,並且無論輸入變量如何,我總能得到該特定子例程的答案零。實數乘法

所有變量都是real*4類型聲明並具有像例如, a = 5,b = 3.5 & c = 0.0005。

我使用柏拉圖IDE

`

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'重現錯誤 - 可能是柏拉圖特有的? – chw21

+0

我可以想象得到0如果有些變量未申報,但在你的例子中情況並非如此。 –

回答

0

可能並非如此,但整數截斷可能是一個問題...... 我會更加明確,可能使用一些調試。

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不,你不能。你必須使用模塊。你**必須**顯示你下次在你的問題中運行的**確切**代碼。 –