2016-07-24 14 views
0

Ich habe einen Code, der einige Multiplikationsereignisse von reellen Zahlen enthält, und ich bekomme immer die Antwort Null für diese bestimmte Unterroutine, unabhängig von den Eingabevariablen.reelle Zahlen Multiplikation

Alle Variablen sind real*4 Typ deklariert und haben Werte wie z.B. a = 5, b = 3,5 & c = 0,0005.

Ich verwende

Plato 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

Ich habe meine Frage mit der entsprechenden Unterroutine Beispiel aktualisiert. – Yousaf

+0

Ich kann den Fehler nicht mit 'gfortran' reproduzieren - vielleicht platonspezifisch? – chw21

+0

Ich könnte mir vorstellen, 0 zu erhalten, wenn einige der Variablen nicht deklariert sind, aber in Ihrem Beispiel ist das nicht der Fall. –

Antwort

0

Wahrscheinlich nicht der Fall, kann aber integer Abschneiden ein Problem sein ... würde ich mehr explizit sein und vielleicht einige Debug verwenden.

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

Ich dachte in diese Richtung. Aber Te muss nicht als '100.0' definiert werden, nur' 100' ist in Ordnung. Aber wenn Ee oder Et nicht als richtig erklärt wurde, wäre das ein großes Problem. –

+0

Ist es notwendig, die Variablen innerhalb der Subroutine zu deklarieren? Können wir nicht die Variablen aus der vorherigen Subroutine verwenden, ohne sie in der aktuellen Subroutine erneut zu deklarieren? – Yousaf

+0

@ArslanYousaf Nein, das geht nicht. Sie müssen Module verwenden. Und Sie müssen den ** genauen ** Code zeigen, den Sie das nächste Mal in Ihren Fragen ausführen. –

Verwandte Themen