| Beschreibung | Diese Funktion ändert das Control-Word der FPU (bzw. des Coprozessors) zwecks Einstellung der als Argument level übergebenen Genauigkeit. Für level=1 erhält man float / Single-Genauigkeit, level=2 liefert double-Genauigkeit, und level=3 schaltet die FPU auf extended-Genauigkeit. Um die aktuell eingestellte Genauigkeit abzufragen, rufe man V_getFPAccuracy.
Den Coprozessor nur auf float / Single-Genauigkeit laufen zu lassen, kann eine deutliche Beschleunigung der Programmausführung bewirken, insbesondere für Funktionen mit Divisionen und auf Rechnern ab dem Pentium-Prozessor. Dies gilt für jegliche Funktionen (einschließlich OptiVec-Funktionen) aller Fließkomma-Datentypen. Auf diese Weise können auch VD_- und VE_-Funktionen mit float / Single-Genauigkeit ausgeführt werden mit dem für double oder extended zulässigen Wertebereich, aber eben nur mit einfacher Genauigkeit.
Auf der anderen Seite reduzieren manche Versionen von Windows XP und Vista automatisch die Fließkomma-Genauigkeit auf doppelte anstelle der früher standardmäßigen dreifachen Genauigkeit (80-bit-extended). Um aus VD_ und VE_-Funktionen ausreichend genaue Ergebnisse zu erhalten, bietet es sich an, V_setFPAccuracy( 3 ); aufrufen und die damit verbundene geringe Geschwindigkeits-Einbuße in Kauf zu nehmen.
Es gibt einige Funktionen, die volle Coprozessor-Genauigkeit für Zwischenergebnisse benötigen, und wieder andere, die Genauigkeits-kontrollierte Iterationen durchführen. Es ist offensichtlich, daß letztere niemals auf doppelte Genauigkeit konvergieren können, wenn die FPU nur einfach-genau arbeitet. Dies kann dazu führen, daß eine solche Funktion in einer Endlos-Schleife hängenbleibt. Man darf daher niemals eine der folgenden Funktionen aufrufen, während die FPU auf einfache (oder, für VE_-Funktionen, auf doppelte) Genauigkeit geschaltet ist:
V?_Kepler,
M?_SVdecompose,
sämtliche nicht-lineare Datenanpassungsfunktionen wie VF_nonlinfit. |
|