CompareByDigits

Vergleicht die Elemente zweier Matrizen oder Vektoren mit der Präzision der signifikanten Dezimalstellen.

ulong vector::CompareByDigits(
  const vector& vec,          // zu vergleichender Vektor
  const int     digits        // Anzahl der signifikanten Dezimalstellen
   );
 
ulong matrix::CompareByDigits(
  const matrix& mat,          // zu vergleichende Matrix
  const int     digits        // Anzahl der signifikanten Dezimalstellen
   );

Parameter

vector_b

[in]  zu vergleichende Matrix.

digits

[in] Anzahl der signifikanten Dezimalstellen für den Vergleich.

epsilon

[in] Präzision des Vergleichs. Wenn sich zwei Werte im Absolutwert um weniger als die angegebene Präzision unterscheiden, werden sie als gleich angesehen.

Rückgabewert

Die Anzahl der nicht übereinstimmenden Elemente der zu vergleichenden Matrizen oder Vektoren: 0, wenn die Matrizen gleich sind, sonst größer als 0.

Hinweis

Die Vergleichsoperatoren == oder != führen einen exakten, elementweisen Vergleich durch. Es ist bekannt, dass der exakte Vergleich von reellen Zahlen nur von begrenztem Nutzen ist, daher wurde die Epsilon-Vergleichsmethode hinzugefügt. Es kann vorkommen, dass eine Matrix Elemente in einem Bereich enthalten kann, z. B. von 1e-20 to 1e+20. Solche Matrizen können elementweise mit der Genauigkeit von signifikanten Dezimalstellen vergleichen werden.

Beispiel

   int    size_m=128;
   int    size_k=256;
   matrix matrix_a(size_m,size_k);
//--- füllen der Matrix
   double  value=0.0;
   for(int i=0i<size_mi++)
     {
      for(int j=0j<size_kj++)
        {
         if(i==j)
            matrix_a[i][j]=1.0+i;
         else
           {
            value+=1.0;
            matrix_a[i][j]=value/1e+20;
           }
        }
     }
//--- Erstellen einer weiteren Matrix
   matrix matrix_c = matrix_a * -1;
 
   ulong errors_epsilon=matrix_a.Compare(matrix_c,1e-15);
   ulong errors_digits=matrix_a.CompareByDigits(matrix_c,15);
 
   printf("Compare matrix %d x %d  errors_epsilon=%I64u  errors_digits=%I64u",size_m,size_k,errors_epsilon,errors_digits);
 
 
  /*
  Compare matrix 128 x 256  errors_epsilon=128  errors_digits=32768
  */