# 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:

`````` smmmmmmmmmmeee
``````

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

Annotations

## Constructors

Value.fromInternal(BigInt internal)

## Properties

asDouble
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
hashCode int
The hash code for this object. [...]
internal
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 Javascript Is Evil (tm). That said, it does let us handle the double integer operations easily.
final
runtimeType Type
A representation of the runtime type of the object.

## Methods

isZero() bool
Determine if this value is zero. In 1's complement mode, -0 isZero, too.
negateAsFloat()
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
inherited
toJson()
toString()
A string representation of this object. [...]
override

## Operators

operator ==( other) bool
The equality operator. [...]
override

## Static Properties

fInfinity
final
fNegativeInfinity
final
zero
Zero for both floats and ints
final

## Static Methods

fromDouble(double num)
fromJson(String v, { maxInternal})