multiply method

FpvType multiply(
  1. FloatingPointValue a,
  2. FloatingPointValue b, {
  3. FloatingPointRoundingMode roundingMode = FloatingPointRoundingMode.roundNearestEven,
})

Multiplies a and b exactly and rounds once into this format.

Implementation

FpvType multiply(FloatingPointValue a, FloatingPointValue b,
    {FloatingPointRoundingMode roundingMode =
        FloatingPointRoundingMode.roundNearestEven}) {
  if (a.isNaN | b.isNaN) {
    return _propagateNaN(a, b);
  }
  final negative = a.sign.toBool() != b.sign.toBool();
  if ((a.isAnInfinity && b.isAZero) || (b.isAnInfinity && a.isAZero)) {
    return nan;
  }
  if (a.isAnInfinity | b.isAnInfinity) {
    return _infinityOrLargestFinite(
        negative: negative, roundingMode: roundingMode);
  }

  final aExact = _decodeFinite(a);
  final bExact = _decodeFinite(b);
  return _quantize((
    significand: aExact.significand * bExact.significand,
    exponent: aExact.exponent + bExact.exponent
  ), negative: negative, roundingMode: roundingMode);
}