readSteppedVarDouble method

double readSteppedVarDouble({
  1. bool signed = true,
  2. List<int> bitLimits = stepList2b,
  3. List<int> decimalBitLimits = stepDecList2b,
})

Implementation

double readSteppedVarDouble(
    {bool signed = true,
    List<int> bitLimits = stepList2b,
    List<int> decimalBitLimits = stepDecList2b}) {
  double sign = signed
      ? !readBit()
          ? -1.0
          : 1.0
      : 1.0;

  int maxDecimal = pow(2, decimalBitLimits.last).toInt() - 1;
  double base =
      readSteppedVarInt(signed: false, bitLimits: bitLimits).toDouble();
  int exponent =
      readSteppedVarInt(signed: false, bitLimits: decimalBitLimits);
  int step = findBitStep(exponent, decimalBitLimits);
  int decimal = readInt(
      signed: false,
      bits: getMaxBitsNeededForDigits(
          pow(2, decimalBitLimits[step]).toInt() - 1));
  return double.parse((sign * (base + (decimal / pow(10, exponent))))
      .toStringAsFixed(maxDecimal));
}