TinyFloats - Convert to/from tiny float formats
my $bin16 = bin16-from-num(1e0); # 0x3C00
my $num = num-from-bin16(0xFBFF); # -65504e0
my $bf16 = bf16-from-num(1e0); # 0x3F80
my $num2 = num-from-bf16(0xFF7F); # -3.3895313892515355e+38
TinyFloats is a collection of simple conversion routines to help with storing floating point data in tiny float formats.
This version supports only conversion between native nums and the following 16-bit floating point storage formats:
bin16 IEEE 754 binary16 format, AKA
_Float16 in C,
float16 in CDDL, and
7.25 in CBOR
bf16 Google Brain bfloat16 format (IEEE 754 binary32 with truncated mantissa)
bin16 attempts to balance the reduction in exponent and mantissa bits, is fairly slow to convert, is used most often in graphics formats, and is commonly converted to native binary32 internally by modern graphics hardware.
bf16 reduces only the mantissa bits, is relatively quick to convert, is used most often in machine learning systems, and is usually used directly by the ML hardware.
Geoffrey Broadwell firstname.lastname@example.org
COPYRIGHT AND LICENSE
Copyright 2021 Geoffrey Broadwell
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.