Am 03.05.2007 um 09:05 schrieb Tobias Schlemmer:
Ich würde mal denke, doppelte Fließkomma-Rechnung spielt in der Computergrafik keine Rolle. Da fällt es nicht auf wenn mal ein halbes Pixel daneben geht. In F95 ist sogar vierfache Genauigkeit drin. Beim gfortran ist es glaube ich Kind = 12.
10 oder 16 je nach Prozessor-Architektur.
Falsch, kann man definieren wie man will. 686er CPUs stellen 80bit-FP- Register zur Verfügung (KIND=10). "double double"/"quad" (KIND=16) gibts auch, ist aber blöd von Hand zu programmieren. Deswegen verstecken die Fortran-Compiler es hinter den KIND-Parametern. Du kannst Dir mit SELECTED_REAL_KIND selbst Genauigkeitsbereiche definieren, ohne die unterliegende Hardware zu kennen, was Sinn und Zweck der Übung ist. (gfortran tut (tat?) das mit libmpfr und libgmp.) Z.B.: REAL(KIND=8) :: x ! double REAL(KIND=SELECTED_REAL_KIND(100,50)) :: y ! 100 Dezimal(!)-Stellen Genauigkeit im Exponentenbereich 10^(-50) bis 10^50
Die Kind-Parameterwerte sind dummerweise Kompilerabhängig.
Sind sie nicht, deren Funktionsweise ist im Standard definiert. Manche Compiler unterstützen manche KINDs nicht, s.o.
Eigentlich müßte um jede Rechenoperation ein Exeptionhandling gemacht werden um zu prüfen, liege ich noch im Intervall oder bin ich im digitalen Nirvana.
Na ja, es gibt noch +Infinity, -Infinity und NaN.
Und genau dafür kannst Du definieren, ob die FPU beim Auftreten eines solchen Wertes eine "Floating Point Exception" auslöst, und einen definierten "Exception Handler" ausführt. Diese Checks sind aber so teuer (zeitintensiv) und so umstritten (mehr Genauigkeit -- Bitstellen, s.o. -- langt meistens, oder ne Weiterbildung der Programmierer zur Vermeidung "klassischer Fehler"), daß sie kaum benutzt werden.
MfG Sebastian