From: Marc Bennewitz Date: Mon, 28 Apr 2014 17:58:10 +0000 (+0200) Subject: Improved logarithm of base 2 and 10 of standard math functions X-Git-Tag: PRE_PHPNG_MERGE~4^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b547e1358d3846fad4cd0c86e2d2e9f5a9039b35;p=php Improved logarithm of base 2 and 10 of standard math functions --- diff --git a/ext/standard/config.m4 b/ext/standard/config.m4 index c1f5aff7c2..e1f9941790 100644 --- a/ext/standard/config.m4 +++ b/ext/standard/config.m4 @@ -337,7 +337,7 @@ fi dnl dnl Check for available functions dnl -AC_CHECK_FUNCS(getcwd getwd asinh acosh atanh log1p hypot glob strfmon nice fpclass isinf isnan mempcpy strpncpy) +AC_CHECK_FUNCS(getcwd getwd asinh acosh atanh log1p log2 hypot glob strfmon nice fpclass isinf isnan mempcpy strpncpy) AC_FUNC_FNMATCH dnl diff --git a/ext/standard/math.c b/ext/standard/math.c index 72f6d51c6f..b33b6e28da 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -697,22 +697,35 @@ PHP_FUNCTION(log1p) PHP_FUNCTION(log) { double num, base = 0; - + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d|d", &num, &base) == FAILURE) { return; } + if (ZEND_NUM_ARGS() == 1) { RETURN_DOUBLE(log(num)); } - if (base <= 0.0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "base must be greater than 0"); - RETURN_FALSE; + +#ifdef HAVE_LOG2 + if (base == 2.0) { + RETURN_DOUBLE(log2(num)); + } +#endif + + if (base == 10.0) { + RETURN_DOUBLE(log10(num)); } - if (base == 1) { + + if (base == 1.0) { RETURN_DOUBLE(php_get_nan()); - } else { - RETURN_DOUBLE(log(num) / log(base)); } + + if (base <= 0.0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "base must be greater than 0"); + RETURN_FALSE; + } + + RETURN_DOUBLE(log(num) / log(base)); } /* }}} */