Say I haben folgendes Programm:Verbessern Präzision auf Variablen durch ganzzahlige Quotienten definiert
program derp
implicit none
integer, parameter :: ikind = selected_real_kind(18)
real (kind = ikind) :: a = 2.0/3.0
print*, a
end program derp
Das Programm derp
0.6666666865348815917
Ausgänge, die eindeutig nicht mehr als 18 Ziffern der Präzision sind. Wenn ich jedoch a=2.0
und mit der gleichen Methode und definieren, dann definieren c=a/b
ich bekomme eine Ausgabe von 0.666666666666666666685
, was gut ist. Wie definiere ich einfach eine Variable als Quotient von ganzen Zahlen und habe sie alle Stellen der Genauigkeit, die ich will, von selected_real_kind
?
Perfekt, danke. Es ist irgendwie käsig, dass Sie das manuell tun müssen, aber ich kann damit leben. –
Es ist eine grundlegende Sache in Fortran, dass RHS ohne Berücksichtigung von LHS bewertet und dann zugewiesen wird. Es gibt mehr Situationen, in denen dies entscheidend ist. –
Bewertung RHS ohne Rücksicht auf die Präzision der LHS ist kaum für Fortran. Wenn du a = 2/3 machst, würdest du eine Float-Operation erwarten (vielleicht ist Interger-Arithmetik das, was du meinst). Was für Fortran (vielleicht) einzigartig ist, ist die Standardeinstellung für die einfache Genauigkeit. Zu schlecht gibt es keine Standardmethode, um den Standard festzulegen. – agentp