VF_subvector_...VD_subvector_...VE_subvector_...
VCF_subvector_...VCD_subvector_...VCE_subvector_...
VPF_subvector_...VPD_subvector_...VPE_subvector_...
 ..._addC..._addV
 ..._divC..._divV
 ..._divrC..._divrV
 ..._mulC..._mulV
 ..._subC..._subV
 ..._subrC..._subrV
FunktionArithmetische Operationen für eine Untermenge der Elemente eines Vektors
Syntax C/C++#include <VFmath.h>
void VF_subvector_addC( fVector Y, ui subsize, unsigned samp, float C );
void VF_subvector_addV( fVector Y, ui subsize, unsigned samp, fVector X );

    (analog alle übrigen Funktionen dieser Familie)
C++ VecObj#include <OptiVec.h>
void vector<T>::subvector_addC( unsigned samp, const T& C );
void vector<T>::subvector_addV( unsigned samp, const vector<T>& X );
Pascal/Delphiuses VFmath;
procedure VF_subvector_addC( Y:fVector; subsiz:UIntSize; samp:UIntSize; C:Single );
procedure VF_subvector_addV( Y:fVector; subsiz:UIntSize; samp:UIntSize; X:fVector );

    (analog alle übrigen Funktionen dieser Familie)
CUDA-Funktion C/C++#include <cudaVFmath.h>
int cudaVF_subvector_addC( fVector d_Y, ui subsize, unsigned samp, float C );
int cusdVF_subvector_addC( fVector d_Y, ui subsize, unsigned samp, float *d_C );
int cudaVF_subvector_addV( fVector d_Y, ui subsize, unsigned samp, fVector X );
void VFcu_subvector_addC( fVector h_Y, ui subsize, unsigned samp, float C );
void VFcu_subvector_addV( fVector h_Y, ui subsize, unsigned samp, fVector X );

    (analog alle übrigen Funktionen dieser Familie)
CUDA-Funktion Pascal/Delphiuses VFmath;
function cudaVF_subvector_addC( d_Y:fVector; subsiz:UIntSize; samp:UIntSize; C:Single );
function cusdVF_subvector_addC( d_Y:fVector; subsiz:UIntSize; samp:UIntSize; d_C:PSingle );
function cudaVF_subvector_addV( d_Y:fVector; subsiz:UIntSize; samp:UIntSize; X:fVector );
procedure VFcu_subvector_addC( h_Y:fVector; subsiz:UIntSize; samp:UIntSize; C:Single );
procedure VFcu_subvector_addV( h_Y:fVector; subsiz:UIntSize; samp:UIntSize; X:fVector );

    (analog alle übrigen Funktionen dieser Familie)
Beschreibung
..._addC:Yi*samp += C,i=0,...subsize−1
..._addV:Yi*samp += Xi,i=0,...subsize−1
..._subC:Yi*samp -= C,i=0,...subsize−1
..._subV:Yi*samp -= Xi,i=0,...subsize−1
..._subrC:Yi*samp = C - Yi*samp,i=0,...subsize−1
..._subrV:  Yi*samp = Xi- Yi*samp,  i=0,...subsize−1
..._mulC:Yi*samp *= C,i=0,...subsize−1
..._mulV:Yi*samp *= Xi,i=0,...subsize−1
..._divC:Yi*samp /= C,i=0,...subsize−1
..._divV:Yi*samp /= Xi,i=0,...subsize−1
..._divrC:Yi*samp = C / Yi*samp,i=0,...subsize−1
..._divrV:Yi*samp = Xi / Yi*samp,i=0,...subsize−1
 
Polar-komplexe Versionen:
Es gibt nur Multiplikation und Division: ...mulC,  ...mulV,  ...divC,  ...divV,  ...divrC und ...divrV.

Die im Suffix des Funktionsnamens angegebene Operation wird auf eine Untermenge von Elementen eines Vektors angewendet. Das Abtast-Intervall wird durch samp angegeben. Beginnend mit dem nullten, wird die jeweilige Operation auf jedes samp-te Element angewandt, bis hin zu insgesamt subsize Elementen. subsize ist also nicht die Gesamtgröße des Vektors, sondern die Anzahl der veränderten Elemente. Man beachte, dass alle Operationen "an Ort und Stelle", d.h. unter Veränderung des Eingabe-Vektors, ausgeführt werden. Für analoge Funktionen, die in der obigen Aufstellung nicht enthalten sind, ist die erforderliche Aufruf-Sequenz analog dem folgenden Beispiel (in dem size als ganzzahliges Vielfaches von 10 angenommen wird):
VF_subvector( Y, size/10, 10, X ); /* extrahieren */
VF_sinc( Y, Y, size/10 ); /* gewünschte Funktion */
VF_subvector_equV( X, size/10, 10, Y ); /* zurück-kopieren */

In einem so einfachen (und gleichzeitig seltenen) Fall wie diesem sollte man allerdings überlegen, ob man nicht doch auf klassische Schleifen zurückgreifen kann. Nur, wenn die gewünschte Funktion nicht in der mathematischen Bibliothek Ihres Compilers enthalten ist, lohnt der Aufwand des Extrahierens und Zurück-Kopierens.

Fehlerbehandlungkeine
Rückgabewertkeiner
QuerverweisVF_subvector,   VF_subvector_equC,   VF_subvector_equV,   VF_addC

VectorLib Inhaltsverzeichnis  OptiVec Home