|
30 | 30 | // |
31 | 31 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
32 | 32 | // |
33 | | -// $Id: long_uint.h 146 2021-09-04 11:56:58Z ykalmykov $ |
| 33 | +// $Id: long_uint.h 151 2021-09-07 11:33:21Z ykalmykov $ |
34 | 34 | // |
35 | 35 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
36 | 36 |
|
@@ -67,7 +67,7 @@ class long_uint_t |
67 | 67 | //////////////////////////////////////////////////////////////////////////////////////////////// |
68 | 68 | // construction/destruction |
69 | 69 |
|
70 | | - constexpr long_uint_t() noexcept; |
| 70 | + constexpr long_uint_t() noexcept = default; |
71 | 71 | constexpr long_uint_t(const long_uint_t& that) noexcept = default; |
72 | 72 | constexpr long_uint_t(long_uint_t&& that) noexcept = default; |
73 | 73 | constexpr long_uint_t(native_array_t digits) noexcept; |
@@ -153,11 +153,6 @@ constexpr type_t muldiv(const type_t& value, const type_t& multiplier, const typ |
153 | 153 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
154 | 154 | // construction/destruction |
155 | 155 |
|
156 | | -template<typename native_t, uint_t size> |
157 | | -constexpr long_uint_t<native_t, size>::long_uint_t() noexcept |
158 | | -{ |
159 | | -} |
160 | | - |
161 | 156 | template<typename native_t, uint_t size> |
162 | 157 | constexpr long_uint_t<native_t, size>::long_uint_t(native_array_t digits) noexcept |
163 | 158 | : digits(std::move(digits)) |
@@ -311,7 +306,9 @@ constexpr long_uint_t<native_t, size> long_uint_t<native_t, size>::operator~() c |
311 | 306 | { |
312 | 307 | long_uint_t result; |
313 | 308 |
|
314 | | - for (uint_t n = 0; n < std::size(digits); ++n) |
| 309 | + result.digits[0] = ~digits[0]; |
| 310 | + |
| 311 | + for (uint_t n = 1; n < std::size(digits); ++n) |
315 | 312 | result.digits[n] = ~digits[n]; |
316 | 313 |
|
317 | 314 | return result; |
@@ -575,10 +572,12 @@ constexpr long_uint_t<native_t, size> long_uint_t<native_t, size>::operator-() c |
575 | 572 | template<typename native_t, uint_t size> |
576 | 573 | constexpr long_uint_t<native_t, size>& long_uint_t<native_t, size>::operator*=(const long_uint_t& that) noexcept |
577 | 574 | { |
| 575 | + native_t carry = 0; |
| 576 | + |
578 | 577 | long_uint_t result; |
| 578 | + result.digits[0] = mulc(digits[0], that.digits[0], carry); |
579 | 579 |
|
580 | | - native_t carry = 0; |
581 | | - for (uint_t n = 0; n < std::size(digits); ++n) |
| 580 | + for (uint_t n = 1; n < std::size(digits); ++n) |
582 | 581 | result.digits[n] = mulc(digits[n], that.digits[0], carry); |
583 | 582 |
|
584 | 583 | for (uint_t n = 1; n < std::size(digits); ++n) { |
|
0 commit comments