@@ -73,6 +73,7 @@ double stdlib_base_log10( const double x ) {
73
73
double valHi ;
74
74
uint32_t hx ;
75
75
uint32_t lx ;
76
+ int32_t ihx ;
76
77
double hfsq ;
77
78
double hi ;
78
79
int32_t i ;
@@ -90,31 +91,33 @@ double stdlib_base_log10( const double x ) {
90
91
}
91
92
xc = x ;
92
93
stdlib_base_float64_to_words ( xc , & hx , & lx );
94
+ ihx = (int32_t )hx ;
93
95
k = 0 ;
94
- if ( hx < HIGH_MIN_NORMAL_EXP ) {
96
+ if ( ihx < HIGH_MIN_NORMAL_EXP ) {
95
97
// Case: x < 2**-1022
96
- if ( ( ( hx & STDLIB_CONSTANT_FLOAT64_HIGH_WORD_ABS_MASK ) | lx ) == 0 ) {
98
+ if ( ( ( ihx & STDLIB_CONSTANT_FLOAT64_HIGH_WORD_ABS_MASK ) | lx ) == 0 ) {
97
99
return STDLIB_CONSTANT_FLOAT64_NINF ;
98
100
}
99
101
k -= 54 ;
100
102
101
103
// Subnormal number, scale up x:
102
104
xc *= TWO54 ;
103
105
stdlib_base_float64_get_high_word ( xc , & hx );
106
+ ihx = (int32_t )hx ;
104
107
}
105
- if ( hx >= HIGH_MAX_NORMAL_EXP ) {
108
+ if ( ihx >= HIGH_MAX_NORMAL_EXP ) {
106
109
return xc + xc ;
107
110
}
108
111
// Case: log(1) = +0
109
- if ( hx == HIGH_BIASED_EXP_0 && lx == 0 ) {
112
+ if ( ihx == HIGH_BIASED_EXP_0 && lx == 0 ) {
110
113
return 0 ;
111
114
}
112
- k += ( ( hx >> 20 ) - STDLIB_CONSTANT_FLOAT64_EXPONENT_BIAS );
113
- hx &= STDLIB_CONSTANT_FLOAT64_HIGH_WORD_SIGNIFICAND_MASK ;
114
- i = ( hx + 0x95f64 ) & HIGH_MIN_NORMAL_EXP ;
115
+ k += ( ( ihx >> 20 ) - STDLIB_CONSTANT_FLOAT64_EXPONENT_BIAS );
116
+ ihx &= STDLIB_CONSTANT_FLOAT64_HIGH_WORD_SIGNIFICAND_MASK ;
117
+ i = ( ihx + 0x95f64 ) & HIGH_MIN_NORMAL_EXP ;
115
118
116
119
// Normalize x or x/2...
117
- stdlib_base_float64_set_high_word ( hx | ( i ^ HIGH_BIASED_EXP_0 ), & xc );
120
+ stdlib_base_float64_set_high_word ( ( uint32_t )( ihx | ( i ^ HIGH_BIASED_EXP_0 ) ), & xc );
118
121
k += ( i >> 20 );
119
122
y = (double )k ;
120
123
f = xc - 1.0 ;
0 commit comments