M: float frexp
dup fp-special? [ dup zero? ] unless* [ 0 ] [
double>bits
- [ HEX: 800f,ffff,ffff,ffff bitand 0.5 double>bits bitor bits>double ]
- [ -52 shift HEX: 7ff bitand 1022 - ] bi
+ [ 0x800f,ffff,ffff,ffff bitand 0.5 double>bits bitor bits>double ]
+ [ -52 shift 0x7ff bitand 1022 - ] bi
] if ; inline
M: integer frexp
[ 0.0 0 ] [
dup 0 > [ 1 ] [ abs -1 ] if swap dup log2 [
- 52 swap - shift HEX: 000f,ffff,ffff,ffff bitand
+ 52 swap - shift 0x000f,ffff,ffff,ffff bitand
0.5 double>bits bitor bits>double
] [ 1 + ] bi [ * ] dip
] if-zero ; inline
<PRIVATE
: most-negative-finite-float ( -- x )
- HEX: -1.ffff,ffff,ffff,fp1023 >integer ; inline
+ -0x1.ffff,ffff,ffff,fp1023 >integer ; inline
: most-positive-finite-float ( -- x )
- HEX: 1.ffff,ffff,ffff,fp1023 >integer ; inline
-CONSTANT: log-2 HEX: 1.62e42fefa39efp-1
-CONSTANT: log10-2 HEX: 1.34413509f79ffp-2
+ 0x1.ffff,ffff,ffff,fp1023 >integer ; inline
+CONSTANT: log-2 0x1.62e42fefa39efp-1
+CONSTANT: log10-2 0x1.34413509f79ffp-2
: (representable-as-float?) ( x -- ? )
most-negative-finite-float