toHalf static method
value as an IEEE half float's bits (rounded; clamped to its range).
Implementation
static int toHalf(double value) {
final f = Float32List(1)..[0] = value;
final bits = Uint32List.view(f.buffer)[0];
final sign = (bits >> 16) & 0x8000;
var exponent = ((bits >> 23) & 0xFF) - 127 + 15;
var mantissa = bits & 0x7FFFFF;
if (exponent <= 0) {
if (exponent < -10) return sign;
mantissa = (mantissa | 0x800000) >> (1 - exponent);
return sign | ((mantissa + 0x1000) >> 13);
}
if (exponent >= 31) return sign | 0x7BFF; // the largest finite half
final half = sign | (exponent << 10) | ((mantissa + 0x1000) >> 13);
// Rounding up a mantissa of all ones carries into the exponent, as it
// should; past the largest finite, clamp.
return (half & 0x7C00) == 0x7C00 ? sign | 0x7BFF : half;
}