Value class Null safety
Immutable calculator value
Floats are stored in something close to what I think is the 16C's internal format
This format is interesting. It's big-endian BCD. The mantissa is sign-magnitude, with the sign in a nybble that is 0 for positive, and 9 for negative. The exponent is 1000's complement BCD, with a magnitude between 0 and 99 (inclusive). So it looks like:
s = mantissa sign (0/9) m = mantissa magnitude e = exponent (1 is 001, -1 is 0x999, -2 is 0x998, etc)
The most significant digit of the mantissa is always non-zero. In other words, 0.1e-99 underflows to zero. The mantissa is NOT stored in complement form. So, a mantissa of -4.2 is 0x94200000000.
Note that I didn't refer to a ROM image to figure this out, or anything like that. I just asked what the behavior of the real calculator is for a couple of data points. cf. https://www.hpmuseum.org/forum/thread-16595-post-145554.html#pid145554
- asDouble → double
Interpret this value as a floating point, and convert to a double.
There is no corresponding asInt method, because the int interpretation
depends on the bit size and the sign mode - cf. IntegerSingMode.toBigInt()
- floatPrefix → String
- hashCode → int
The hash code for this object. [...]
- internal → BigInt
The calculator's internal representation of a value, as an unsigned
integer of (up to) 64 bits in normal operation (128 for the double
integer operations). It's a BigInt rather than an int because
integer operations easily.
- runtimeType → Type
A representation of the runtime type of the object.
BigInt bitMask) → Value
Model< ProgramOperation>m) → bool
- Determine if this value is zero. In 1's complement mode, -0 isZero, too.
) → Value
Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
) → String
) → String
A string representation of this object. [...]