V_setFPAccuracy
FunktionGenauigkeit des Coprozessors (FPU) einstellen
Syntax C/C++#include <VecLib.h>
void V_setFPAccuracy( unsigned level );
Pascal/Delphiuses VecLib;
procedure V_setFPAccuracy( level:UInt );
BeschreibungDiese 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, dass letztere niemals auf doppelte Genauigkeit konvergieren können, wenn die FPU nur einfach-genau arbeitet. Dies kann dazu führen, dass 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.
Rückgabewertkeiner
QuerverweisV_getFPAccuracy

VectorLib Inhaltsverzeichnis  OptiVec Home