mul51 method

(BigInt, BigInt) mul51(
  1. BigInt a,
  2. int b
)

mul51 returns lo + hi * 2⁵¹ = a * b.

Implementation

(BigInt low, BigInt high) mul51(BigInt a, int b) {
  final mh = (a * b.toBigInt) >> 64;
  final ml = a * b.toBigInt;
  final lo = ml & maskLow51Bits;
  final hi = (mh << 13) | (ml >> 51);
  return (lo, hi);
}