VF_sincos | VD_sincos | VE_sincos |
VFx_sincos | VDx_sincos | VEx_sincos |
VFr_sincos | VDr_sincos | VEr_sincos |
VFrx_sincos | VDrx_sincos | VErx_sincos |
|
Funktion | Sinus- und Cosinus-Funktion gleichzeitig |
|
Syntax C/C++ | #include <VFmath.h>
int VF_sincos( fVector YSin, fVector YCos, fVector X, ui size );
int VFx_sincos( fVector YSin, fVector YCos, fVector X, ui size, float A, float B, float C );
int VFr_sincos( fVector YSin, fVector YCos, fVector X, ui size );
int VFrx_sincos( fVector YSin, fVector YCos, fVector X, ui size, float A, float B, float C ); |
C++ VecObj | #include <OptiVec.h>
int vector<T>::sincos( vector<T> YCos, const vector<T>& X );
int vector<T>::x_sincos( vector<T> YCos, const vector<T>& X, const T& A, const T& B, const T& C );
int vector<T>::r_sincos( vector<T> YCos, const vector<T>& X );
int vector<T>::rx_sincos( vector<T> YCos, const vector<T>& X, const T& A, const T& B, const T& C ); |
Pascal/Delphi | uses VFmath;
function VF_sincos( Sin, Cos, X:fVector; size:UIntSize ): IntBool;
function VFx_sincos( Sin, Cos, X:fVector; size:UIntSize; A, B, C:Single ): IntBool;
function VFr_sincos( Sin, Cos, X:fVector; size:UIntSize ): IntBool;
function VFrx_sincos( Sin, Cos, X:fVector; size:UIntSize; A, B, C:Single ): IntBool; |
|
CUDA-Funktion C/C++ | #include <cudaVFmath.h>
int cudaVF_sincos( fVector d_YSin, fVector d_YCos, fVector d_X, ui size );
int cudaVFx_sincos( fVector d_YSin, fVector d_YCos, fVector d_X, ui size, float A, float B, float C );
int cusdVFx_sincos( fVector d_YSin, fVector d_YCos, fVector d_X, ui size, float *d_A, float *d_B, float *d_C );
int VFcu_sincos( fVector h_YSin, fVector h_YCos, fVector h_X, ui size );
int VFxcu_sincos( fVector h_YSin, fVector h_YCos, fVector h_X, ui size, float A, float B, float C );
|
CUDA-Funktion Pascal/Delphi | uses VFmath;
function cudaVF_sincos( d_YSin, d_YCos, d_X:fVector; size:UIntSize ): IntBool;
function cudaVFx_sincos( d_YSin, d_YCos, d_X:fVector; size:UIntSize; A, B, C:Single ): IntBool;
function cusdVFx_sincos( d_YSin, d_YCos, d_X:fVector; size:UIntSize; d_A, d_B, d_C:PSingle ): IntBool;
function VFcu_sincos( h_YSin, h_YCos, h_X:fVector; size:UIntSize ): IntBool;
function VFxcu_sincos( h_YSin, h_YCos, h_X:fVector; size:UIntSize; A, B, C:Single ): IntBool;
|
|
Beschreibung | einfache Versionen:
YSini = sin( Xi )
YCosi = cos( Xi )
erweiterte Versionen:
YSini = C * sin( A*Xi+B )
YCosi = C * cos( A*Xi+B )
Sinus- und Cosinus-Funktion werden gleichzeitig berechnet, was viel effizienter als die Berechnung in getrennten Aufrufen ist. Für sehr große Werte von Xi nehmen Rundungsfehler überhand. Wenn sich die X-Werte als gebrochenzahlige Vielfache von p darstellen lassen, sollte man lieber VF_sincosrpi als VF_sincos verwenden.
Falls man andererseits sicher ist, dass sich alle Eingabewerte innerhalb eines "vernünftigen" Bereiches befinden, so können die schnelleren Funktionen mit reduziertem Eingabe-Bereich eingesetzt werden (Präfix VFr_ und VFrx_). Sie verlangen folgende Begrenzungen:
64-bit: |Xi| < 232 (ungefähr 4.2*109)
32-bit: |Xi| ≤ 2p).
Die Funktionen mit reduziertem Eingabe-Bereich existieren nur für die CPU, nicht für CUDA. |
|
Fehlerbehandlung | Genauigkeits-Fehler ühren zum Resultat 1.0 für den Cosinus und 0.0 für den Sinus (als ob das Argument 0.0 wäre) sowie zu einem Rückgabewert ungleich 0. Ansonsten werden diese Fehler ignoriert. _matherr wird daher nicht aufgerufen. Andere Fehler dürften nicht auftreten. |
|
Rückgabewert | FALSE (0), wenn fehlerfrei, andernfalls TRUE (≠ 0). |
|
|