Rechnen mit Kommazahlen ist nie ganz exakt. real hat etwa 7 Stellen, real(8) (doppelte Genauigkeit) etwa 15. Für Simulationen nimmt man fast immer doppelte Genauigkeit. Besser als die Zahl 8 ist die portable Art: integer, parameter :: dp = kind(1.0d0) und dann real(dp).
Fortrans Stärke sind Supercomputer. Mit do concurrent sagst du dem Compiler, dass die Schleifendurchläufe unabhängig sind und parallel laufen dürfen. Für mehrere Prozessorkerne gibt es OpenMP (!$omp parallel do) und für Rechencluster MPI. Du übersetzt mit gfortran -O2 -fopenmp.
program genau
implicit none
integer, parameter :: dp = kind(1.0d0)
real(dp) :: x(1000000), summe
integer :: i
do concurrent (i = 1:size(x))
x(i) = sqrt(real(i, dp))
end do
summe = sum(x)
print *, "Summe:", summe
print *, "0.1 + 0.2 =", 0.1_dp + 0.2_dp
end program genauMerke
real(8)bzw.kind(1.0d0)für doppelte Genauigkeitdo concurrenterlaubt parallele Durchläufe- OpenMP und MPI für mehrere Kerne und Cluster
Aufgabe
Berechne 0.1 + 0.2 mit `real` und mit `real(8)` und vergleiche die Ausgabe.