rescaleBinaryFixedPoint function
BinaryFixedPoint
rescaleBinaryFixedPoint(
- BinaryFixedPoint value,
- int newTotalBits,
- int newFractionalBits, [
- FixedPointRoundingMode rounding = FixedPointRoundingMode.strict,
Rescales value to newTotalBits and newFractionalBits.
Implementation
BinaryFixedPoint rescaleBinaryFixedPoint(
BinaryFixedPoint value,
int newTotalBits,
int newFractionalBits, [
FixedPointRoundingMode rounding = FixedPointRoundingMode.strict,
]) {
if (newFractionalBits < 0) {
throw RangeError.range(newFractionalBits, 0, null, 'newFractionalBits');
}
if (value.totalBits == newTotalBits &&
value.fractionalBits == newFractionalBits) {
return value;
}
final raw = switch (newFractionalBits.compareTo(value.fractionalBits)) {
0 => value.raw,
1 => value.raw << (newFractionalBits - value.fractionalBits),
_ => _divideWithRounding(
value.raw,
BigInt.one << (value.fractionalBits - newFractionalBits),
rounding,
),
};
return rawBinaryFixedPoint(value.signedness, newTotalBits, newFractionalBits)(
raw,
);
}