Advertisement
Guest User

Untitled

a guest
Oct 25th, 2014
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.82 KB | None | 0 0
  1. QFloat QFloat::operator+(QFloat b) // Toán tử cộng
  2. {
  3.     // Nếu có một trong 2 số bằng 0 thì trả về số còn lại
  4.     if (data[0] == 0 && data[1] == 0 && data[2] == 0 && data[3] == 0)
  5.         return b;
  6.  
  7.     if (b.data[0] == 0 && b.data[1] == 0 && b.data[2] == 0 && b.data[3] == 0)
  8.         return *this;
  9.  
  10.     // Nếu cả hai số đều khác 0
  11.     int Mu1, Mu2;
  12.     Mu1 = Mu2 = 0;
  13.  
  14.     // Tinh so mu
  15.     /*Mu1 = (data[0] << 1) >> 17;
  16.     Mu2 = (b.data[0] << 1) >> 17;*/
  17.  
  18.     Mu1 = (data[0] >> 16);
  19.     Mu2 = (b.data[0] >> 16);
  20.  
  21.     if (Mu1 < Mu2)
  22.     {
  23.         for (int i = 0; Mu1 < Mu2; i++)
  24.         {
  25.             Mu1++;
  26.             int bit01 = data[0] & 1;
  27.             int bit12 = data[1] & 1;
  28.             int bit23 = data[2] & 1;
  29.  
  30.             data[3] = (data[3] >> 1) | (bit23 << 31);
  31.             data[2] = (data[2] >> 1) | (bit12 << 31);
  32.             data[1] = (data[1] >> 1) | (bit01 << 31);
  33.  
  34.             int temp = 0;
  35.             int bit, j;
  36.             data[0] = data[0] >> 1;
  37.  
  38.             for (j = 0; j < 15; j++)
  39.             {
  40.                 bit = (data[0] >> j) & 1;
  41.                 temp = temp | (bit << j);
  42.             }
  43.  
  44.             if (i == 0)
  45.                 bit = 1;
  46.             else
  47.                 bit = 0;
  48.  
  49.             temp = temp | (bit << j);
  50.  
  51.             if (((data[0] >> 31) & 1) == 0)
  52.                 data[0] = Mu1 << 16;
  53.             else
  54.             {
  55.                 data[0] = Mu1 << 16;
  56.                 data[0] = data[0] | (1 << 31);
  57.             }
  58.  
  59.             data[0] = data[0] | temp;
  60.         }
  61.     }
  62.     else if (Mu2 < Mu1)
  63.     {
  64.     }
  65.  
  66.     QFloat c;
  67.     c.data[3] = data[3] + b.data[3];
  68.  
  69.     c.data[2] = data[2] + b.data[2];
  70.     c.data[1] = data[1] + b.data[1];
  71.     c.data[0] = data[0] + b.data[0];
  72.  
  73.  
  74.     //c.data[0] = (Mu1 << 16) | ((data[0] << 16) >> 16) | ((b.data[0] << 16) >> 16);
  75.    
  76.     int temp = 0;
  77.     int bit, j;
  78.  
  79.     for (j = 0; j < 16; j++)
  80.     {
  81.         bit = (c.data[0] >> j) & 1;
  82.         temp = temp | (bit << j);
  83.     }
  84.  
  85.     if (((data[0] >> 31) & 1) == 0)
  86.         c.data[0] = Mu1 << 16;
  87.     else
  88.     {
  89.         c.data[0] = Mu1 << 16;
  90.         c.data[0] = data[0] | (1 << 31);
  91.     }
  92.  
  93.     c.data[0] = c.data[0] | temp;
  94.  
  95.  
  96.     return c;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement