@@ -40,20 +40,18 @@ var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' );
40
40
var uint32ToInt32 = require ( '@stdlib/number/uint32/base/to-int32' ) ;
41
41
var ldexpf = require ( '@stdlib/math/base/special/ldexpf' ) ;
42
42
var LN2 = require ( '@stdlib/constants/float32/ln-two' ) ;
43
- var BIAS = require ( '@stdlib/constants/float32/exponent-bias' ) ;
44
- var ABS_MASK = require ( '@stdlib/constants/float64/high-word-abs-mask' ) ;
43
+ var FLOAT32_EXPONENT_BIAS = require ( '@stdlib/constants/float32/exponent-bias' ) ;
44
+ var FLOAT32_ABS_MASK = require ( '@stdlib/constants/float32/abs-mask' ) ;
45
+ var FLOAT32_SIGNIFICAND_MASK = require ( '@stdlib/constants/float32/significand-mask' ) ;
45
46
var polyvalP = require ( './polyval_p.js' ) ;
46
47
47
48
48
49
// VARIABLES //
49
50
50
- // 0x00100000 = 1048576 => 0 00000000001 00000000000000000000 => biased exponent: 1 = -1022+1023 => 2^-1022
51
+ // 0x00800000 = 8388608 => 0 00000001 00000000000000000000000 => biased exponent: 1 = -126+127 => 2^-126 (smallest normal float32)
51
52
var HIGH_MIN_NORMAL_EXP = 0x00800000 ; // asm type annotation
52
53
53
- // 0x007fffff = 8388607 => 0 00000000000 11111111111111111111111 => biased exponent: 0 = -127+127 => 2^-127
54
- var HIGH_SIGNIFICAND_MASK = 0x007fffff ; // asm type annotation
55
-
56
- // 0x3fe00000 = 1071644672 => 0 01111111110 00000000000000000000 => biased exponent: 1022 = -1+1023 => 2^-1
54
+ // 0x3f000000 = 1056964608 => 0 01111110 00000000000000000000000 => biased exponent: 126 = -1+127 => 2^-1 (i.e., 0.5)
57
55
var HIGH_BIASED_EXP_NEG_1 = 0x3f000000 ; // asm type annotation
58
56
59
57
// 0xffff8000 = 4294934528 => 1 11111111111 11111000000000000000
@@ -97,18 +95,18 @@ function pow2( j, hp, lp ) {
97
95
var i ;
98
96
var k ;
99
97
100
- i = ( j & ABS_MASK ) ; // asm type annotation
101
- k = ( ( i >> HIGH_NUM_SIGNIFICAND_BITS ) - BIAS ) ; // asm type annotation
98
+ i = ( j & FLOAT32_ABS_MASK ) ; // asm type annotation
99
+ k = ( ( i >> HIGH_NUM_SIGNIFICAND_BITS ) - FLOAT32_EXPONENT_BIAS ) ; // asm type annotation
102
100
n = 0 ;
103
101
104
102
// `|z| > 0.5`, set `n = [z+0.5]`
105
103
if ( i > HIGH_BIASED_EXP_NEG_1 ) {
106
104
n = ( j + ( HIGH_MIN_NORMAL_EXP >> ( k + 1 ) ) ) >>> 0 ; // asm type annotation
107
- k = ( ( ( n & ABS_MASK ) >> HIGH_NUM_SIGNIFICAND_BITS ) - BIAS ) ; // new k for n
108
- tmp = ( ( n & ~ ( HIGH_SIGNIFICAND_MASK >> k ) ) ) >>> 0 ; // asm type annotation
105
+ k = ( ( ( n & FLOAT32_ABS_MASK ) >> HIGH_NUM_SIGNIFICAND_BITS ) - FLOAT32_EXPONENT_BIAS ) ; // new k for n
106
+ tmp = ( ( n & ~ ( FLOAT32_SIGNIFICAND_MASK >> k ) ) ) >>> 0 ; // asm type annotation
109
107
tmp = float64ToFloat32 ( tmp ) ;
110
108
t = toWordf ( tmp ) ;
111
- n = ( ( ( n & HIGH_SIGNIFICAND_MASK ) | HIGH_MIN_NORMAL_EXP ) >> ( HIGH_NUM_SIGNIFICAND_BITS - k ) ) >>> 0 ; // eslint-disable-line max-len
109
+ n = ( ( ( n & FLOAT32_SIGNIFICAND_MASK ) | HIGH_MIN_NORMAL_EXP ) >> ( HIGH_NUM_SIGNIFICAND_BITS - k ) ) >>> 0 ; // eslint-disable-line max-len
112
110
if ( j < 0 ) {
113
111
n = - n ;
114
112
}
0 commit comments