@@ -53,6 +53,7 @@ double stdlib_base_log2( const double x ) {
53
53
double valHi ;
54
54
uint32_t hx ;
55
55
uint32_t lx ;
56
+ int32_t ihx ;
56
57
double hfsq ;
57
58
double hi ;
58
59
int32_t i ;
@@ -69,31 +70,33 @@ double stdlib_base_log2( const double x ) {
69
70
}
70
71
xc = x ;
71
72
stdlib_base_float64_to_words ( xc , & hx , & lx );
73
+ ihx = (int32_t )hx ;
72
74
k = 0 ;
73
- if ( hx < HIGH_MIN_NORMAL_EXP ) {
75
+ if ( ihx < HIGH_MIN_NORMAL_EXP ) {
74
76
// Case: x < 2**-1022
75
- if ( ( ( hx & STDLIB_CONSTANT_FLOAT64_HIGH_WORD_ABS_MASK ) | lx ) == 0 ) {
77
+ if ( ( ( ihx & STDLIB_CONSTANT_FLOAT64_HIGH_WORD_ABS_MASK ) | lx ) == 0 ) {
76
78
return STDLIB_CONSTANT_FLOAT64_NINF ;
77
79
}
78
80
k -= 54 ;
79
81
80
82
// Subnormal number, scale up x:
81
83
xc *= TWO54 ;
82
84
stdlib_base_float64_get_high_word ( xc , & hx );
85
+ ihx = (int32_t )hx ;
83
86
}
84
- if ( hx >= HIGH_MAX_NORMAL_EXP ) {
87
+ if ( ihx >= HIGH_MAX_NORMAL_EXP ) {
85
88
return xc + xc ;
86
89
}
87
90
// Case: log(1) = +0
88
- if ( hx == HIGH_BIASED_EXP_0 && lx == 0 ) {
91
+ if ( ihx == HIGH_BIASED_EXP_0 && lx == 0 ) {
89
92
return 0 ;
90
93
}
91
- k += ( ( hx >>20 ) - STDLIB_CONSTANT_FLOAT64_EXPONENT_BIAS );
92
- hx &= STDLIB_CONSTANT_FLOAT64_HIGH_WORD_SIGNIFICAND_MASK ;
93
- i = ( hx + 0x95f64 ) & HIGH_MIN_NORMAL_EXP ;
94
+ k += ( ( ihx >>20 ) - STDLIB_CONSTANT_FLOAT64_EXPONENT_BIAS );
95
+ ihx &= STDLIB_CONSTANT_FLOAT64_HIGH_WORD_SIGNIFICAND_MASK ;
96
+ i = ( ihx + 0x95f64 ) & HIGH_MIN_NORMAL_EXP ;
94
97
95
98
// Normalize x or x/2...
96
- stdlib_base_float64_set_high_word ( hx |( i ^HIGH_BIASED_EXP_0 ), & xc );
99
+ stdlib_base_float64_set_high_word ( ( uint32_t )( ihx |( i ^HIGH_BIASED_EXP_0 ) ), & xc );
97
100
k += (i >>20 );
98
101
y = (double )k ;
99
102
f = xc - 1.0 ;
0 commit comments