CompareByDigits

Anlamlı basamak hassasiyetiyle iki matrisin/vektörün elemanlarını karşılaştırır.

ulong vector::CompareByDigits(
  const vector& vec,          // karşılaştırılacak vektör
  const int     digits        // anlamlı basamak sayısı
   );
 
ulong matrix::CompareByDigits(
  const matrix& mat,          // karşılaştırılacak matris
  const int     digits        // anlamlı basamak sayısı
   );

Parametreler

vector_b

[in]  Karşılaştırılacak vektör.

digits

[in] Karşılaştırılacak anlamlı basamakların sayısı.

epsilon

[in] Karşılaştırma hassasiyeti. Mutlak olarak iki değer belirtilen hassasiyetten daha az farklılık gösteriyorsa, eşit olarak kabul edilirler.

Geri dönüş değeri

Karşılaştırılan matrislerin veya vektörlerin eşleşmeyen elemanlarının sayısı: matrisler eşitse 0, aksi takdirde 0'dan büyük olacaktır.

Not

== veya != karşılaştırma operatörleri, eleman bazında tam karşılaştırma yürütür. Reel sayıların tam karşılaştırmasının sınırlı kullanımı olduğu bilindiğinden, epsilon karşılaştırma yöntemi eklenmiştir. Bir matris, örneğin 1e-20 ila 1e+20 aralığında değerlere sahip elemanlar içerebilir. Bu tür matrisler, anlamlı basamak hassasiyetiyle eleman bazında karşılaştırma kullanılarak işlenebilir.

Örnek:

   int    size_m=128;
   int    size_k=256;
   matrix matrix_a(size_m,size_k);
//--- matrisi doldur
   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;
           }
        }
     }
//--- başka bir matris al
   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
  */