writeSteppedVarDouble method

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

Implementation

void writeSteppedVarDouble(double value,
    {bool signed = true,
    List<int> bitLimits = stepList2b,
    List<int> decimalBitLimits = stepDecList2b}) {
  if (signed) {
    writeBit(value > 0);
  }
  int maxDecimal = pow(2, decimalBitLimits.last).toInt() - 1;
  writeSteppedVarInt(value.truncate().abs(),
      signed: false, bitLimits: bitLimits);
  double decimal = double.parse(
      (value.abs() - value.truncate().abs()).toStringAsFixed(maxDecimal));
  int exponent = 0;

  while (decimal != decimal.truncate() && exponent < maxDecimal) {
    exponent++;
    decimal *= 10;
  }

  writeSteppedVarInt(exponent, signed: false, bitLimits: decimalBitLimits);
  writeInt(decimal.truncate(),
      signed: false,
      bits: getMaxBitsNeededForDigits(
          pow(2, decimalBitLimits[findBitStep(exponent, decimalBitLimits)])
                  .toInt() -
              1));
}