From 16169e89abac08cf1dd73601de4b27822ef42c96 Mon Sep 17 00:00:00 2001 From: Jorg Adam Sowa Date: Tue, 11 Jul 2023 22:51:05 +0200 Subject: [PATCH 1/2] Reorder array construction in the function --- ext/standard/math.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/ext/standard/math.c b/ext/standard/math.c index ad2823ea49bf6..b4752e5a4023d 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -19,13 +19,13 @@ #include "php.h" #include "php_math.h" -#include "zend_multiply.h" +#include "zend_bitset.h" #include "zend_exceptions.h" +#include "zend_multiply.h" #include "zend_portability.h" -#include "zend_bitset.h" -#include #include +#include #include #include "basic_functions.h" @@ -40,10 +40,9 @@ static inline int php_intlog10abs(double value) { result = (int)floor(log10(value)); } else { static const double values[] = { - 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, - 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, - 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, - 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22}; + 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, + 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, + 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22}; /* Do a binary search with 5 steps */ result = 15; if (value < values[result]) { @@ -78,15 +77,15 @@ static inline int php_intlog10abs(double value) { /* {{{ php_intpow10 Returns pow(10.0, (double)power), uses fast lookup table for exact powers */ static inline double php_intpow10(int power) { - static const double powers[] = { - 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, - 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, - 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22}; - /* Not in lookup table */ if (power < 0 || power > 22) { return pow(10.0, (double)power); } + + static const double powers[] = { + 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, + 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22}; + return powers[power]; } /* }}} */ @@ -1023,7 +1022,7 @@ PHPAPI zend_string *_php_math_number_format_ex(double d, int dec, const char *de size_t integral; size_t reslen = 0; int count = 0; - int is_negative=0; + int is_negative = 0; if (d < 0) { is_negative = 1; From 962bfe7826912ea1cec22d4a85ba4a395753c6e3 Mon Sep 17 00:00:00 2001 From: Jorg Adam Sowa Date: Tue, 11 Jul 2023 23:02:18 +0200 Subject: [PATCH 2/2] Optimize function php_intlog10abs --- ext/standard/math.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/standard/math.c b/ext/standard/math.c index b4752e5a4023d..05eb6cdfdd332 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -33,18 +33,18 @@ /* {{{ php_intlog10abs Returns floor(log10(fabs(val))), uses fast binary search */ static inline int php_intlog10abs(double value) { - int result; value = fabs(value); if (value < 1e-8 || value > 1e22) { - result = (int)floor(log10(value)); + return (int)floor(log10(value)); } else { + /* Do a binary search with 5 steps */ + int result = 15; static const double values[] = { 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22}; - /* Do a binary search with 5 steps */ - result = 15; + if (value < values[result]) { result -= 8; } else { @@ -69,8 +69,8 @@ static inline int php_intlog10abs(double value) { result -= 1; } result -= 8; + return result; } - return result; } /* }}} */