Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- QFloat QFloat::operator+(QFloat b) // Toán tử cộng
- {
- // Nếu có một trong 2 số bằng 0 thì trả về số còn lại
- if (data[0] == 0 && data[1] == 0 && data[2] == 0 && data[3] == 0)
- return b;
- if (b.data[0] == 0 && b.data[1] == 0 && b.data[2] == 0 && b.data[3] == 0)
- return *this;
- // Nếu cả hai số đều khác 0
- int Mu1, Mu2;
- Mu1 = Mu2 = 0;
- // Tinh so mu
- /*Mu1 = (data[0] << 1) >> 17;
- Mu2 = (b.data[0] << 1) >> 17;*/
- Mu1 = (data[0] >> 16);
- Mu2 = (b.data[0] >> 16);
- if (Mu1 < Mu2)
- {
- for (int i = 0; Mu1 < Mu2; i++)
- {
- Mu1++;
- int bit01 = data[0] & 1;
- int bit12 = data[1] & 1;
- int bit23 = data[2] & 1;
- data[3] = (data[3] >> 1) | (bit23 << 31);
- data[2] = (data[2] >> 1) | (bit12 << 31);
- data[1] = (data[1] >> 1) | (bit01 << 31);
- int temp = 0;
- int bit, j;
- data[0] = data[0] >> 1;
- for (j = 0; j < 15; j++)
- {
- bit = (data[0] >> j) & 1;
- temp = temp | (bit << j);
- }
- if (i == 0)
- bit = 1;
- else
- bit = 0;
- temp = temp | (bit << j);
- if (((data[0] >> 31) & 1) == 0)
- data[0] = Mu1 << 16;
- else
- {
- data[0] = Mu1 << 16;
- data[0] = data[0] | (1 << 31);
- }
- data[0] = data[0] | temp;
- }
- }
- else if (Mu2 < Mu1)
- {
- }
- QFloat c;
- c.data[3] = data[3] + b.data[3];
- c.data[2] = data[2] + b.data[2];
- c.data[1] = data[1] + b.data[1];
- c.data[0] = data[0] + b.data[0];
- //c.data[0] = (Mu1 << 16) | ((data[0] << 16) >> 16) | ((b.data[0] << 16) >> 16);
- int temp = 0;
- int bit, j;
- for (j = 0; j < 16; j++)
- {
- bit = (c.data[0] >> j) & 1;
- temp = temp | (bit << j);
- }
- if (((data[0] >> 31) & 1) == 0)
- c.data[0] = Mu1 << 16;
- else
- {
- c.data[0] = Mu1 << 16;
- c.data[0] = data[0] | (1 << 31);
- }
- c.data[0] = c.data[0] | temp;
- return c;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement