Changeset 1757
- Timestamp:
- 07/14/10 06:59:38 (14 years ago)
- Files:
-
- trunk/phobos/std/internal/math/biguintcore.d (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/phobos/std/internal/math/biguintcore.d
r1734 r1757 557 557 // For example, 10^^100 = (((5^^13)^^7) * 5^^9) * 2^^100. 558 558 // and 5^^13 still fits into a uint. 559 559 evenshiftbits = cast(uint)( (evenbits * y) & BIGDIGITSHIFTMASK); 560 560 if (x0 == 1) { // Perfect power of 2 561 561 result = 1UL; 562 562 return result << (evenbits + firstnonzero*BigDigit.sizeof)*y; 563 563 } else { 564 564 int p = highestPowerBelowUintMax(x0); 565 565 if (y <= p) { // Just do it with pow 566 566 result = cast(ulong)intpow(x0, y); 567 if (evenshiftbits+firstnonzero == 0) return result; 567 if (evenbits + firstnonzero == 0) 568 return result; 568 569 return result<< (evenbits + firstnonzero*BigDigit.sizeof)*y; 569 570 } 570 571 y0 = y/p; 571 572 finalMultiplier = intpow(x0, y - y0*p); 572 573 x0 = intpow(x0, p); 573 574 } 574 575 xlength = 1; 575 576 } 576 577 577 578 // Check for overflow and allocate result buffer
