VF_cnt_...VD_cnt_...VE_cnt_...
VI_cnt_...VBI_cnt_...VSI_cnt_...VLI_cnt_...VQI_cnt_... 
VU_cnt_...VUB_cnt_...VUS_cnt_...VUL_cnt_...VUQ_cnt_...VUI_cnt_...
      ...eq0      ...ne0      ...gt0      ...ge0      ...le0      ...lt0
      ...eqC      ...neC      ...gtC      ...geC      ...leC      ...ltC
      ...eqV      ...neV      ...gtV      ...geV      ...leV      ...ltV      ...stV      ...dtV
        ...inclrange0C        ...exclrange0C
        ...inclrangeCC        ...exclrangeCC
VCF_cnt_...VCD_cnt_...VCE_cnt_...
VPF_cnt_...VPD_cnt_...VPE_cnt_...
      ...eq0      ...ne0
      ...eqC      ...neC
      ...eqV      ...neV      ...stV      ...dtV
FunktionAnzahl der eine Testbedingung erfüllenden Vektor-Elemente
Syntax C/C++#include <VFmath.h>
ui VF_cnt_eq0( fVector X, ui size );
ui VF_cnt_ne0( fVector X, ui size );
ui VF_cnt_gt0( fVector X, ui size );
ui VF_cnt_ge0( fVector X, ui size );
ui VF_cnt_lt0( fVector X , ui size );
ui VF_cnt_le0( fVector X, ui size );

ui VF_cnt_eqC( fVector X, ui size, float C );
    (analog: ..._neC, ..._gtC, ..._geC, ..._ltC, ..._leC)

ui VF_cnt_eqV( fVector X, fVector Y, ui size);
    (analog: ..._neV, ..._gtV, ..._geV, ..._ltV, ..._leV)
ui VF_cnt_stV( fVector X, fVector Y, ui size, float TolRel, float TolAbs );
ui VF_cnt_dtV( fVector X, fVector Y, ui size, float TolRel, float TolAbs );

ui VF_cnt_inclrange0C( fVector X, ui size, float C );
ui VF_cnt_exclrange0C( fVector X, ui size, float C );
ui VF_cnt_inclrangeCC( fVector X, ui size, float CLo, float CHi );
ui VF_cnt_exclrangeCC( fVector X, ui size, float CLo, float CHi );

    (analog VD_, VE_, VI_ usw.)

ui VCF_cnt_eq0( cfVector X, ui size );
ui VCF_cnt_ne0( cfVector X, ui size );
ui VCF_cnt_eqC( cfVector X, ui size, fComplex C );
ui VCF_cnt_neC( cfVector X, ui size, fComplex C );
ui VCF_cnt_eqV( cfVector X, cfVector Y, ui size );
ui VCF_cnt_neV( cfVector X, cfVector Y, ui size );
ui VCF_cnt_stV( cfVector X, cfVector Y, ui size, fComplex TolRel, fComplex TolAbs );
ui VCF_cnt_dtV( cfVector X, cfVector Y, ui size, fComplex TolRel, fComplex TolAbs );

    (analog VPF_, VPD_, VPE_, VCD_ und VCE_ Versionen)

C++ VecObj#include <OptiVec.h>
ui vector<T>::cnt_eq0( );
ui vector<T>::cnt_ne0( );
ui vector<T>::cnt_gt0( );
ui vector<T>::cnt_ge0( );
ui vector<T>::cnt_lt0( );
ui vector<T>::cnt_le0( );
ui vector<T>::cnt_eqC( const T& C );
ui vector<T>::cnt_eqV( const vector<T>& Y );
ui vector<T>::cnt_stV( const vector<T>& Y, const T& TolRel, const T& TolAbs );
ui vector<T>::cnt_dtV( const vector<T>& Y, const T& TolRel, const T& TolAbs );
ui vector<T>::cnt_inclrange0C( const T& C );
ui vector<T>::cnt_exclrange0C( const T& C );
ui vector<T>::cnt_inclrangeCC( const T& CLo, const T& CHi );
ui vector<T>::cnt_exclrangeCC( const T& CLo, const T& CHi );
ui vector<complex<T>>::cnt_eq0( );
ui vector<complex<T>>::cnt_ne0( );
ui vector<complex<T>>::cnt_eqC( complex<T> C );
ui vector<complex<T>>::cnt_neC( complex<T> C );
ui vector<complex<T>>::cnt_eqV( const vector<complex<T>>& Y );
ui vector<complex<T>>::cnt_neV( const vector<complex<T>>& Y );
ui vector<complex<T>>::cnt_stV( const vector<complex<T>>& Y, complex<T> TolRel, complex<T> TolAbs );
ui vector<complex<T>>::cnt_dtV( const vector<complex<T>>& Y, complex<T> TolRel, complex<T> TolAbs );
Pascal/Delphiuses VFstd;
function VF_cnt_eq0( X:fVector; size:UIntSize ):UIntSize;
function VF_cnt_ne0( X:fVector; size:UIntSize ):UIntSize;
function VF_cnt_gt0( X:fVector; size:UIntSize ):UIntSize;
function VF_cnt_ge0( X:fVector; size:UIntSize ):UIntSize;
function VF_cnt_lt0( X:fVector; size:UIntSize ):UIntSize;
function VF_cnt_le0( X:fVector; size:UIntSize ):UIntSize;

function VF_cnt_eqC( X:fVector; size:UIntSize; C:Single ):UIntSize;
    (analog: ..._neC, ..._gtC, ..._geC, ..._ltC, ..._leC)

function VF_cnt_eqV( X, Y:fVector; size:UIntSize ):UIntSize;
    (analog: ..._neV, ..._gtV, ..._geV, ..._ltV, ..._leV)
function VF_cnt_stV( X, Y:fVector; size:UIntSize; TolRel, TolAbs:Single ):UIntSize;
function VF_cnt_dtV( X, Y:fVector; size:UIntSize; TolRel, TolAbs:Single ):UIntSize;

    (analog VD_, VE_, VI_ usw.)

function VF_cnt_inclrange0C( X:fVector; size:UIntSize; C:Single ): UIntSize;
function VF_cnt_exclrange0C( X:fVector; size:UIntSize; C:Single ): UIntSize;
function VF_cnt_inclrangeCC( X:fVector; size:UIntSize; CLo, CHi:Single ): UIntSize;
function VF_cnt_exclrangeCC( X:fVector; size:UIntSize; CLo, CHi:Single ): UIntSize;

    (analog VD_, VE_, VI_ usw.)

function VCF_cnt_eq0( X:cfVector; size:UIntSize ):UIntSize;
function VCF_cnt_ne0( X:cfVector; size:UIntSize ):UIntSize;
function VCF_cnt_eqC( X:cfVector; size:UIntSize; C:fComplex ):UIntSize;
function VCF_cnt_neC( X:cfVector; size:UIntSize; C:fComplex ):UIntSize;
function VCF_cnt_eqV( X, Y:cfVector; size:UIntSize ):UIntSize;
function VCF_cnt_neV( X, Y:cfVector; size:UIntSize ):UIntSize;
function VCF_cnt_stV( X, Y:cfVector; size:UIntSize; TolRel, TolAbs:fComplex ):UIntSize;
function VCF_cnt_dtV( X, Y:cfVector; size:UIntSize; TolRel, TolAbs:fComplex ):UIntSize;

    (analog VPF_, VPD_, VPE_, VCD_ und VCE_ Versionen)

CUDA-Funktion C/C++#include <cudaVFmath.h>
int cudaVF_cnt_eq0( ui *h_nTrue, fVector d_X, ui size );
ui VFcu_cnt_eq0( fVector h_X, ui size );

    (analog .._ne0, .._gt0, .._ge0, .._le0, .._lt0)

int cudaVF_cnt_eqC( ui *h_nTrue, fVector d_X, ui size, float C );
int cusdVF_cnt_eqC( ui *h_nTrue, fVector d_X, ui size, float *d_C );
ui VFcu_cnt_eqC( fVector h_X, ui size, float C );

    (analog: ..._neC, ..._gtC, ..._geC, ..._ltC, ..._leC)

int cudaVF_cnt_eqV( ui *h_nTrue, fVector d_X, fVector d_Y, ui size);
ui VFcu_cnt_eqV( fVector h_X, fVector h_Y, ui size);

    (analog: ..._neV, ..._gtV, ..._geV, ..._ltV, ..._leV)

int cudaVF_cnt_stV( ui *h_nTrue, fVector d_X, fVector d_Y, ui size, float TolRel, float TolAbs);
int cusdVF_cnt_stV( ui *h_nTrue, fVector d_X, fVector d_Y, ui size, float *d_TolRel, float *d_TolAbs);
ui VFcu_cnt_stV( fVector h_X, fVector h_Y, ui size, float TolRel, float TolAbs);

    (analog: ..._dtV)

int cudaVF_cnt_inclrange0C( ui *h_nTrue, fVector d_X, ui size, float C );
int cusdVF_cnt_inclrange0C( ui *h_nTrue, fVector d_X, ui size, float *d_C );
int cudaVF_cnt_inclrangeCC( ui *h_nTrue, fVector d_X, ui size, float CLo, float CHi );
int cusdVF_cnt_inclrangeCC( ui *h_nTrue, fVector d_X, ui size, float *d_CLo, float *d_CHi );
ui VFcu_cnt_inclrange0C( fVector h_X, ui size, float C );
ui VFcu_cnt_inclrangeCC( fVector h_X, ui size, float CLo, float CHi );

    (analog: ..._exclrange0C and ..._exclrangeCC)

CUDA-Funktion Pascal/Delphiuses VFmath;
function cudaVF_cnt_eq0( var h_nTrue:UIntSize; d_X:fVector; size:UIntSize ): IntBool;
function VFcu_cnt_eq0( h_X:fVector; size:UIntSize ): UIntSize;

    (analog: .._ne0, .._gt0, .._ge0, .._le0, .._lt0)

function cudaVF_cnt_eqC( var h_nTrue:UIntSize; d_X:fVector; size:UIntSize; C:Single ): IntBool;
function cusdVF_cnt_eqC( var h_nTrue:UIntSize; d_X:fVector; size:UIntSize; d_C:PSingle ): IntBool;
function VFcu_cnt_eqC( h_X:fVector; size:UIntSize; C:Single ): UIntSize;

    (analog: ..._neC, ..._gtC, ..._geC, ..._ltC, ..._leC)

function cudaVF_cnt_eqV( var h_nTrue:UIntSize; d_X, d_Y:fVector; size:UIntSize ): IntBool;
function VFcu_cnt_eqV( h_X, h_Y:fVector; size:UIntSize ): UIntSize;

    (analog: ..._neV, ..._gtV, ..._geV, ..._ltV, ..._leV)

function cudaVF_cnt_eqV( var h_nTrue:UIntSize; d_X, d_Y:fVector; size:UIntSize ): IntBool;
function VFcu_cnt_eqV( h_X, h_Y:fVector; size:UIntSize ): UIntSize;

    (similarly: ..._neV, ..._gtV, ..._geV, ..._ltV, ..._leV)

function cudaVF_cnt_stV( var h_nTrue:UIntSize; d_X, d_Y:fVector; size:UIntSize, TolRel, TolAbs:Single ): IntBool;
function cusdVF_cnt_stV( var h_nTrue:UIntSize; d_X, d_Y:fVector; size:UIntSize, d_TolRel, d_TolAbs:PSingle ): IntBool;
function VFcu_cnt_stV( h_X, h_Y:fVector; size:UIntSize, TolRel, TolAbs:Single ): UIntSize;

    (similarly: ..._dtV)

function cudaVF_cnt_inclrange0C( var h_nTrue:UIntSize; d_X:fVector; size:UIntSize; C:Single ): IntBool;
function cusdVF_cnt_inclrange0C( var h_nTrue:UIntSize; d_X:fVector; size:UIntSize; d_C:PSingle ): IntBool;
function cudaVF_cnt_inclrangeCC( var h_nTrue:UIntSize; d_X:fVector; size:UIntSize; CLo, CHi:Single ): IntBool;
function cusdVF_cnt_inclrangeCC( var h_nTrue:UIntSize; d_X:fVector; size:UIntSize; d_CLo, d_CHi:PSingle ): IntBool;
function VFcu_cnt_inclrange0C( h_X:fVector; size:UIntSize; C:Single ): UIntSize;
function VFcu_cnt_inclrangeCC( h_X:fVector; size:UIntSize; CLo, CHi:Single ): UIntSize;

    (analog: ..._exclrange0C and ..._exclrangeCC)

BeschreibungDie vorliegenden Funktionen arbeiten ähnlich VF_cmp_.... Hier allerdings wird nur die Anzahl der erfüllten Bedingungen (anstelle jedes einzelnen Vergleichs-Ergebnisses) ermittelt und zurückgegeben.

a) Einfache Vergleichsfunktionen:
Jedes Element von X wird mit 0, einer Konstanten C oder dem korrespondierenden Element eines anderen Vektors, Y, verglichen. Die dabei zu überprüfende Bedingung wird durch zwei Buchstaben angegeben:
 
"eq" ("equal")True, wenn Xi = 0 (oder C bzw. Yi)
"ne" ("not equal")True, wenn Xi ≠ 0 (oder C bzw. Yi)
"gt" ("gteater than")True, wenn Xi > 0 (oder C bzw. Yi)
"ge" ("greater or equal")   True, wenn Xi ≥ 0 (oder C bzw. Yi)
"lt" ("less than")True, wenn Xi < 0 (oder C bzw. Yi)
"le" ("less or equal")True, wenn Xi ≤ 0 (oder C bzw. Yi)
"st" ("similar to")True, wenn Xi ≈ Yi,   d.h. | Xi − Yi | ≤ max( |Yi| * TolRel, TolAbs)
"dt" ("dissimilar to")True, wenn Xi ≉ Yi,   d.h. | Xi − Yi | > max( |Yi| * TolRel, TolAbs)

Für komplexe Zahlen machen nur der Test auf Gleichheit ("eq"), Ungleichheit ("ne"), Ähnlichkeit ("st") und Unähnlichkeit ("dt") Sinn. Die übrigen Testbedingungen existieren nicht für komplexe Zahlen. Bei den Tests auf Ähnlichkeit ("st") und Unähnlichkeit ("dt") für komplexe Zahlen sind die Parameter TolRel und TolAbs ebenfalls komplex, um ggf. unterschiedliche Toleranzen für Real- und Imaginärteile festlegen zu können.
Für vorzeichenlose Ganzzahl-Typen existieren naturgemäß diejenigen Funktionen nicht, die die Bedingung Xi < 0 oder Xi ≤ 0 prüfen, ebensowenig wie die trivialen Tests Xi ≥ 0.

b) Bereichsprüfungs-Funktionen:
Für jedes Element von X wird geprüft, ob es in den Bereich fällt, der entweder durch 0 und eine (positive oder negative) Konstante C oder durch zwei Konstanten, CLo und CHi, spezifiziert wird. Dabei kann gewählt werden, ob der Bereich inclusiv oder exclusiv der Endpunkte zu verstehen ist:
VF_cnt_inclrange0C prüft, ob 0 ≤ x ≤ C (für positives C) oder 0 ≥ x ≥ C (für negatives C), während VF_cnt_exclrangeCC den Test auf CLo < x < CHi durchführt.
Für vorzeichenlose Ganzzahl-Typen existieren keine Funktionen "VU_cnt_inclrange0C", da die Bedingung Xi ≥ 0 trivialerweise immer erfüllt ist.

Fehlerbehandlungkeine
RückgabewertAnzahl der die Testbedingung erfüllenden Elemente
QuerverweisVF_cmp_...

VectorLib Inhaltsverzeichnis  OptiVec Home