2017-04-26 5 views
0

Ich habe Zweifel über Fortran. Im folgenden Code:Fortran ganzzahlig bis doppelt

program p 
integer num 
real*8 d 
num=111 
d=dble(num/4) 
print*, d 
end program p 

Ich bekomme 27,000000000000000. Ist es, weil num eine ganze Zahl ist und so num/4 vom selben Typ sein muss? Es ist ein Teil eines anderen Codes, den ich in Matlab übersetzen muss: in diesem speziellen Fall kann ich es als num/4 truncated übersetzen?

floor(num/4) 

Vielen Dank im Voraus

+1

Hinweis, verwenden Sie nicht real * 8, es könnte nicht wirklich tun, was Sie denken, dass es tut. Verwende die 'real (kind = rk)' -Notation und wähle die Art rk mit 'selected_real_kind' aus. Ihr Problem ist, dass Sie den Bereich um die Abteilung herum tun. Das heißt, zuerst wird die Division durchgeführt (was eine Ganzzahldivision ist, da beide Argumente Ganzzahlen sind) und dann das Ergebnis in ein Realteil transformiert. Stattdessen könnten Sie zum Beispiel tun: 'd = real (num, kind = rk)/4'. Besser noch, vielleicht so etwas: 'd = 0.25_rk * num'. – haraldkl

Antwort

2

Ja, Sie erhalten 27.000000000000000 weil num eine ganze Zahl ist, so num\4 eine ganze Zahl ist.

Um eine echte Präzision Ergebnis zu erhalten, würden Sie einfach d=1./4*num

Ja schreiben, in Matlab diese floor(num/4) als num ist ein doppelter Genauigkeit Schwimmer, wenn Sie nichts anderes angeben würde.

+0

Es ist klar, danke! – scana

+0

Oder 'num/4.' usw. – francescalus