ofDouble method

  1. @override
FloatingPoint64Value ofDouble(
  1. double inDouble, {
  2. FloatingPointRoundingMode roundingMode = FloatingPointRoundingMode.roundNearestEven,
})
override

Convert from double using its native binary representation

Implementation

@override
FloatingPoint64Value ofDouble(double inDouble,
    {FloatingPointRoundingMode roundingMode =
        FloatingPointRoundingMode.roundNearestEven}) {
  if (roundingMode != FloatingPointRoundingMode.roundNearestEven) {
    return super.ofDouble(inDouble, roundingMode: roundingMode);
  }

  final byteData = ByteData(8)..setFloat64(0, inDouble);
  final accum = byteData.buffer
      .asUint8List()
      .map((b) => LogicValue.ofInt(b, 64))
      .reduce((accum, v) => (accum << 8) | v);

  return populate(
      sign: accum[-1],
      exponent: accum.slice(exponentWidth + mantissaWidth - 1, mantissaWidth),
      mantissa: accum.slice(mantissaWidth - 1, 0));
}