small-bits>float ( raw fraction-bits exponent-bits -- x )


Vocabulary
math.floats.small.private

Inputs
rawan object
fraction-bitsan object
exponent-bitsan object


Outputs
xan object


Definition


:: small-bits>float ( raw fraction-bits exponent-bits -- x )
raw 32768 bitand 48 shift :> sign exponent-bits 2^ 1 -
:> max-exponent raw fraction-bits neg shift
max-exponent bitand :> exponent raw fraction-bits bits
:> fraction exponent-bits 1 - 2^ 1 -
:> bias exponent max-exponent = [
fraction zero?
[ sign 9218868437227405312 bitor ]
[ 9221120237041090560 ] if bits>double
] [
exponent zero?
[ fraction 1 bias - fraction-bits - ] [
fraction fraction-bits 2^ bitor exponent bias -
fraction-bits -
] if :> ( significand power ) significand zero?
[ sign bits>double ] [
significand log2 :> top sign top power + 1023 +
52 shift bitor significand top 2^ - 52 top - shift
bitor bits>double
] if
] if ;