multiply method
- FloatingPointValue a,
- FloatingPointValue b, {
- 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);
}