CompareByDigits

Compare les éléments de deux matrices/vecteurs avec la précision des chiffres significatifs.

ulong vector::CompareByDigits(
  const vector& vec,          // vecteur de comparaison
  const int     digits        // nombre de chiffres significatifs
   );
 
ulong matrix::CompareByDigits(
  const matrix& mat,          // matrice de comparaison
  const int     digits        // nombre de chiffres significatifs
   );

Paramètres

vector_b

[in]  Vecteur de comparaison.

digits

[in] Nombre de chiffres significatifs à utiliser dans la comparaison.

epsilon

[in] Précision de la comparaison. Si deux valeurs diffèrent en valeur absolue de moins que la précision spécifiée, elles sont considérées comme égales.

Valeur de Retour

Le nombre d'éléments non concordants des matrices ou des vecteurs comparés : 0 si les matrices sont égales, supérieur à 0 sinon.

Note

Les opérateurs de comparaison == ou != exécutent une comparaison exacte élément par élément. On sait que la comparaison exacte des nombres réels est d'une utilité limitée, c'est pourquoi la méthode de comparaison epsilon a été ajoutée. Il peut arriver qu'une matrice contienne des éléments dans une plage, par exemple de 1e-20 à 1e+20. De telles matrices peuvent être traitées en utilisant une comparaison élément par élément jusqu'à des chiffres significatifs.

Exemple

   int    size_m=128;
   int    size_k=256;
   matrix matrix_a(size_m,size_k);
//--- remplit la matrice
   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;
           }
        }
     }
//--- récupère une autre matrice
   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 une matrice %d x %d  errors_epsilon=%I64u  errors_digits=%I64u",size_m,size_k,errors_epsilon,errors_digits);
 
 
  /*
  Compare une matrice 128 x 256  errors_epsilon=128  errors_digits=32768
  */