round-bfloat-intermediate ( exact -- value )


Vocabulary
math.floats.small.bfloat.private

Inputs
exactan object


Outputs
valuean object


Definition


:: round-bfloat-intermediate ( exact -- value )
exact 0 < 2147483648 0 ?
:> sign exact abs :> magnitude magnitude zero?
[ sign bits>float ] [
magnitude numerator log2 magnitude denominator log2 -
:> exponent! magnitude exponent rational-power-of-two <
[ exponent 1 - exponent! ] when exponent -126 <
[ sign bits>float ] [
exponent 128 >=
[ sign 2139095040 bitor bits>float ] [
magnitude 23 exponent - rational-power-of-two *
:> scaled scaled >integer :> significand scaled
significand =
[ significand ] [ significand 1 bitor ] if
8388607 bitand exponent 127 + 23 shift bitor
sign bitor bits>float
] if
] if
] if ;