| Index: src/diy_fp.h
|
| ===================================================================
|
| --- src/diy_fp.h (revision 4162)
|
| +++ src/diy_fp.h (working copy)
|
| @@ -64,26 +64,7 @@
|
|
|
|
|
| // this = this * other.
|
| - void Multiply(const DiyFp& other) {
|
| - // Simply "emulates" a 128 bit multiplication.
|
| - // However: the resulting number only contains 64 bits. The least
|
| - // significant 64 bits are only used for rounding the most significant 64
|
| - // bits.
|
| - const uint64_t kM32 = 0xFFFFFFFFu;
|
| - uint64_t a = f_ >> 32;
|
| - uint64_t b = f_ & kM32;
|
| - uint64_t c = other.f_ >> 32;
|
| - uint64_t d = other.f_ & kM32;
|
| - uint64_t ac = a * c;
|
| - uint64_t bc = b * c;
|
| - uint64_t ad = a * d;
|
| - uint64_t bd = b * d;
|
| - uint64_t tmp = (bd >> 32) + (ad & kM32) + (bc & kM32);
|
| - tmp += 1U << 31; // round
|
| - uint64_t result_f = ac + (ad >> 32) + (bc >> 32) + (tmp >> 32);
|
| - e_ += other.e_ + 64;
|
| - f_ = result_f;
|
| - }
|
| + void Multiply(const DiyFp& other);
|
|
|
| // returns a * b;
|
| static DiyFp Times(const DiyFp& a, const DiyFp& b) {
|
|
|