Handbook
Glossary
float>small-bits ( x fraction-bits exponent-bits -- bits )
Vocabulary
math
.
floats
.
small
.
private
Inputs
x
an
object
fraction-bits
an
object
exponent-bits
an
object
Outputs
bits
an
object
Definition
USING:
kernel
math
math.bitwise
;
IN:
math.floats.small.private
::
float>small-bits
( x fraction-bits exponent-bits -- bits )
x
>float
double>bits
:>
raw raw -48
shift
32768
bitand
:>
sign raw -52
shift
2047
bitand
:>
exponent raw 52
bits
:>
fraction exponent-bits
2^
1
-
:>
max-exponent exponent-bits 1
-
2^
1
-
:>
bias exponent 2047
=
[
fraction
zero?
[
sign max-exponent fraction-bits
shift
bitor
]
[
max-exponent fraction-bits
shift
1 fraction-bits 1
-
shift
bitor
]
if
]
[
exponent
zero?
[
fraction -1074
]
[
fraction 52
2^
bitor
exponent 1075
-
]
if
:>
( significand power ) significand
zero?
[
sign
]
[
significand
log2
:>
top top power
+
bias
+
:>
target-exponent! target-exponent max-exponent
>=
[
sign max-exponent fraction-bits
shift
bitor
]
[
target-exponent 0
<=
[
significand power bias
+
fraction-bits
+
1
-
round-binary-shift
sign
bitor
]
[
significand fraction-bits top
-
round-binary-shift
:>
rounded! rounded fraction-bits 1
+
2^
>=
[
rounded -1
shift
rounded! target-exponent 1
+
target-exponent!
]
when
target-exponent max-exponent
>=
[
sign max-exponent fraction-bits
shift
bitor
]
[
sign target-exponent fraction-bits
shift
bitor
rounded fraction-bits
2^
-
bitor
]
if
]
if
]
if
]
if
]
if
;