From cc6d90a096d79bef6f106d80b04339b2596f7e26 Mon Sep 17 00:00:00 2001 From: Jon Harper Date: Sun, 26 Jul 2015 17:53:42 +0200 Subject: [PATCH] math.integers, fix bignum/f for results in ]0x1.0p-1022,0x0.4p-1022] --- core/math/integers/integers-tests.factor | 7 +++++++ core/math/integers/integers.factor | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/math/integers/integers-tests.factor b/core/math/integers/integers-tests.factor index c41ac78001..e83aeffb9e 100644 --- a/core/math/integers/integers-tests.factor +++ b/core/math/integers/integers-tests.factor @@ -272,3 +272,10 @@ IN: math.integers.tests { -1/0. } [ 2048 2^ -1 /f ] unit-test { -1/0. } [ 2048 2^ neg 1 /f ] unit-test { 1/0. } [ 2048 2^ neg -1 /f ] unit-test + +! bignum/f had a bug for results in ]0x1.0p-1022,0x0.4p-1022] +! these are the first subnormals... +{ 0x0.cp-1022 } [ 12 1026 2^ /f ] unit-test +{ 0x0.8p-1022 } [ 8 1026 2^ /f ] unit-test +{ 0x0.6p-1022 } [ 6 1026 2^ /f ] unit-test +{ 0x0.4p-1022 } [ 4 1026 2^ /f ] unit-test diff --git a/core/math/integers/integers.factor b/core/math/integers/integers.factor index bee5cf6325..7d4f8ccb4a 100644 --- a/core/math/integers/integers.factor +++ b/core/math/integers/integers.factor @@ -142,7 +142,7 @@ M: bignum (log2) bignum-log2 ; inline : scale-float ( mantissa scale -- float' ) { { [ dup 1024 > ] [ 2drop 1/0. ] } - { [ dup -1023 < ] [ 1021 + shift bits>double ] } + { [ dup -1021 < ] [ 1021 + shift bits>double ] } [ [ 52 2^ 1 - bitand ] dip 1022 + 52 shift bitor bits>double ] } cond ; inline