@@ -36,7 +36,7 @@ static inline int php_intlog10abs(double value) {
36
36
value = fabs (value );
37
37
38
38
if (value < 1e-8 || value > 1e22 ) {
39
- return (int )floor (log10 (value ));
39
+ return (int ) floor (log10 (value ));
40
40
} else {
41
41
/* Do a binary search with 5 steps */
42
42
int result = 15 ;
@@ -79,7 +79,7 @@ static inline int php_intlog10abs(double value) {
79
79
static inline double php_intpow10 (int power ) {
80
80
/* Not in lookup table */
81
81
if (power < 0 || power > 22 ) {
82
- return pow (10.0 , (double )power );
82
+ return pow (10.0 , (double ) power );
83
83
}
84
84
85
85
static const double powers [] = {
@@ -101,11 +101,11 @@ static inline double php_round_helper(double value, int mode) {
101
101
* in branches in the assembly) to make the following cases simpler.
102
102
*/
103
103
double integral ;
104
- double fractional = modf (value , & integral );
104
+ double fractional = fabs ( modf (value , & integral ) );
105
105
106
106
switch (mode ) {
107
107
case PHP_ROUND_HALF_UP :
108
- if (fabs ( fractional ) >= 0.5 ) {
108
+ if (fractional >= 0.5 ) {
109
109
/* We must increase the magnitude of the integral part
110
110
* (rounding up / towards infinity). copysign(1.0, integral)
111
111
* will either result in 1.0 or -1.0 depending on the sign
@@ -120,7 +120,7 @@ static inline double php_round_helper(double value, int mode) {
120
120
return integral ;
121
121
122
122
case PHP_ROUND_HALF_DOWN :
123
- if (fabs ( fractional ) > 0.5 ) {
123
+ if (fractional > 0.5 ) {
124
124
return integral + copysign (1.0 , integral );
125
125
}
126
126
@@ -145,7 +145,6 @@ static inline double php_round_helper(double value, int mode) {
145
145
return fractional == 0 ? integral : integral + copysign (1.0 , integral );
146
146
147
147
case PHP_ROUND_HALF_EVEN :
148
- fractional = fabs (fractional );
149
148
if (fractional > 0.5 ) {
150
149
return integral + copysign (1.0 , integral );
151
150
}
@@ -164,7 +163,6 @@ static inline double php_round_helper(double value, int mode) {
164
163
return integral ;
165
164
166
165
case PHP_ROUND_HALF_ODD :
167
- fractional = fabs (fractional );
168
166
if (fractional > 0.5 ) {
169
167
return integral + copysign (1.0 , integral );
170
168
}
@@ -179,7 +177,7 @@ static inline double php_round_helper(double value, int mode) {
179
177
180
178
return integral ;
181
179
182
- EMPTY_SWITCH_DEFAULT_CASE ();
180
+ EMPTY_SWITCH_DEFAULT_CASE ();
183
181
}
184
182
// FIXME: GCC bug, branch is considered reachable.
185
183
ZEND_UNREACHABLE ();
@@ -200,7 +198,7 @@ PHPAPI double _php_math_round(double value, int places, int mode) {
200
198
return value ;
201
199
}
202
200
203
- places = places < INT_MIN + 1 ? INT_MIN + 1 : places ;
201
+ places = places < INT_MIN + 1 ? INT_MIN + 1 : places ;
204
202
precision_places = 14 - php_intlog10abs (value );
205
203
206
204
f1 = php_intpow10 (abs (places ));
@@ -209,9 +207,9 @@ PHPAPI double _php_math_round(double value, int places, int mode) {
209
207
the requested places BUT is small enough to make sure a non-zero value
210
208
is returned, pre-round the result to the precision */
211
209
if (precision_places > places && precision_places - 15 < places ) {
212
- int64_t use_precision = precision_places < INT_MIN + 1 ? INT_MIN + 1 : precision_places ;
210
+ int64_t use_precision = precision_places < INT_MIN + 1 ? INT_MIN + 1 : precision_places ;
213
211
214
- f2 = php_intpow10 (abs ((int )use_precision ));
212
+ f2 = php_intpow10 (abs ((int ) use_precision ));
215
213
if (use_precision >= 0 ) {
216
214
tmp_value = value * f2 ;
217
215
} else {
@@ -222,9 +220,9 @@ PHPAPI double _php_math_round(double value, int places, int mode) {
222
220
tmp_value = php_round_helper (tmp_value , mode );
223
221
224
222
use_precision = places - precision_places ;
225
- use_precision = use_precision < INT_MIN + 1 ? INT_MIN + 1 : use_precision ;
223
+ use_precision = use_precision < INT_MIN + 1 ? INT_MIN + 1 : use_precision ;
226
224
/* now correctly move the decimal point */
227
- f2 = php_intpow10 (abs ((int )use_precision ));
225
+ f2 = php_intpow10 (abs ((int ) use_precision ));
228
226
/* because places < precision_places */
229
227
tmp_value = tmp_value / f2 ;
230
228
} else {
@@ -275,79 +273,79 @@ PHPAPI double _php_math_round(double value, int places, int mode) {
275
273
276
274
/* {{{ Return the absolute value of the number */
277
275
PHP_FUNCTION (abs )
278
- {
279
- zval * value ;
276
+ {
277
+ zval * value ;
280
278
281
- ZEND_PARSE_PARAMETERS_START (1 , 1 )
279
+ ZEND_PARSE_PARAMETERS_START (1 , 1 )
282
280
Z_PARAM_NUMBER (value )
283
- ZEND_PARSE_PARAMETERS_END ();
281
+ ZEND_PARSE_PARAMETERS_END ();
284
282
285
- switch (Z_TYPE_P (value )) {
286
- case IS_LONG :
287
- if (UNEXPECTED (Z_LVAL_P (value ) == ZEND_LONG_MIN )) {
288
- RETURN_DOUBLE (- (double )ZEND_LONG_MIN );
289
- } else {
290
- RETURN_LONG (Z_LVAL_P (value ) < 0 ? - Z_LVAL_P (value ) : Z_LVAL_P (value ));
291
- }
292
- case IS_DOUBLE :
293
- RETURN_DOUBLE (fabs (Z_DVAL_P (value )));
294
- EMPTY_SWITCH_DEFAULT_CASE ();
295
- }
296
- }
283
+ switch (Z_TYPE_P (value )) {
284
+ case IS_LONG :
285
+ if (UNEXPECTED (Z_LVAL_P (value ) == ZEND_LONG_MIN )) {
286
+ RETURN_DOUBLE (- (double ) ZEND_LONG_MIN );
287
+ } else {
288
+ RETURN_LONG (Z_LVAL_P (value ) < 0 ? - Z_LVAL_P (value ) : Z_LVAL_P (value ));
289
+ }
290
+ case IS_DOUBLE :
291
+ RETURN_DOUBLE (fabs (Z_DVAL_P (value )));
292
+ EMPTY_SWITCH_DEFAULT_CASE ();
293
+ }
294
+ }
297
295
/* }}} */
298
296
299
297
/* {{{ Returns the next highest integer value of the number */
300
298
PHP_FUNCTION (ceil )
301
299
{
302
300
zval * value ;
303
301
304
- ZEND_PARSE_PARAMETERS_START (1 , 1 )
302
+ ZEND_PARSE_PARAMETERS_START (1 , 1 )
305
303
Z_PARAM_NUMBER (value )
306
- ZEND_PARSE_PARAMETERS_END ();
307
-
308
- switch (Z_TYPE_P (value )) {
309
- case IS_LONG :
310
- RETURN_DOUBLE (zval_get_double (value ));
311
- case IS_DOUBLE :
312
- RETURN_DOUBLE (ceil (Z_DVAL_P (value )));
313
- EMPTY_SWITCH_DEFAULT_CASE ();
314
- }
315
- }
304
+ ZEND_PARSE_PARAMETERS_END ();
305
+
306
+ switch (Z_TYPE_P (value )) {
307
+ case IS_LONG :
308
+ RETURN_DOUBLE (zval_get_double (value ));
309
+ case IS_DOUBLE :
310
+ RETURN_DOUBLE (ceil (Z_DVAL_P (value )));
311
+ EMPTY_SWITCH_DEFAULT_CASE ();
312
+ }
313
+ }
316
314
/* }}} */
317
315
318
316
/* {{{ Returns the next lowest integer value from the number */
319
317
PHP_FUNCTION (floor )
320
- {
321
- zval * value ;
318
+ {
319
+ zval * value ;
322
320
323
- ZEND_PARSE_PARAMETERS_START (1 , 1 )
321
+ ZEND_PARSE_PARAMETERS_START (1 , 1 )
324
322
Z_PARAM_NUMBER (value )
325
- ZEND_PARSE_PARAMETERS_END ();
326
-
327
- switch (Z_TYPE_P (value )) {
328
- case IS_LONG :
329
- RETURN_DOUBLE (zval_get_double (value ));
330
- case IS_DOUBLE :
331
- RETURN_DOUBLE (floor (Z_DVAL_P (value )));
332
- EMPTY_SWITCH_DEFAULT_CASE ();
333
- }
334
- }
323
+ ZEND_PARSE_PARAMETERS_END ();
324
+
325
+ switch (Z_TYPE_P (value )) {
326
+ case IS_LONG :
327
+ RETURN_DOUBLE (zval_get_double (value ));
328
+ case IS_DOUBLE :
329
+ RETURN_DOUBLE (floor (Z_DVAL_P (value )));
330
+ EMPTY_SWITCH_DEFAULT_CASE ();
331
+ }
332
+ }
335
333
/* }}} */
336
334
337
335
/* {{{ Returns the number rounded to specified precision */
338
336
PHP_FUNCTION (round )
339
- {
340
- zval * value ;
341
- int places = 0 ;
342
- zend_long precision = 0 ;
343
- zend_long mode = PHP_ROUND_HALF_UP ;
337
+ {
338
+ zval * value ;
339
+ int places = 0 ;
340
+ zend_long precision = 0 ;
341
+ zend_long mode = PHP_ROUND_HALF_UP ;
344
342
345
- ZEND_PARSE_PARAMETERS_START (1 , 3 )
343
+ ZEND_PARSE_PARAMETERS_START (1 , 3 )
346
344
Z_PARAM_NUMBER (value )
347
345
Z_PARAM_OPTIONAL
348
346
Z_PARAM_LONG (precision )
349
347
Z_PARAM_LONG (mode )
350
- ZEND_PARSE_PARAMETERS_END ();
348
+ ZEND_PARSE_PARAMETERS_END ();
351
349
352
350
if (ZEND_NUM_ARGS () >= 2 ) {
353
351
if (precision >= 0 ) {
@@ -370,14 +368,14 @@ PHP_FUNCTION(round)
370
368
default :
371
369
zend_argument_value_error (3 , "must be a valid rounding mode (PHP_ROUND_*)" );
372
370
RETURN_THROWS ();
373
- }
371
+ }
374
372
375
- switch (Z_TYPE_P (value )) {
376
- case IS_LONG :
377
- /* Simple case - long that doesn't need to be rounded. */
378
- if (places >= 0 ) {
379
- RETURN_DOUBLE (zval_get_double (value ));
380
- }
373
+ switch (Z_TYPE_P (value )) {
374
+ case IS_LONG :
375
+ /* Simple case - long that doesn't need to be rounded. */
376
+ if (places >= 0 ) {
377
+ RETURN_DOUBLE (zval_get_double (value ));
378
+ }
381
379
ZEND_FALLTHROUGH ;
382
380
383
381
case IS_DOUBLE :
0 commit comments