docs: void multiply(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.
          final long kM32 = 0xFFFFFFFFL;
          long a = f >>> 32;
          long b = f & kM32;
          long c = other.f >>> 32;
          long d = other.f & kM32;
          long ac = a * c;
          long bc = b * c;
          long ad = a * d;
          long bd = b * d;
          long tmp = (bd >>> 32) + (ad & kM32) + (bc & kM32);
          // By adding 1U << 31 to tmp we round the final result.
          // Halfway cases will be round up.
          tmp += 1L << 31;
          long result_f = ac + (ad >>> 32) + (bc >>> 32) + (tmp >>> 32);
          e += other.e + 64;
          f = result_f;
      }