|
|
|
@ -661,22 +661,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)); |
|
|
|
} |
|
|
|
/* }}} */ |
|
|
|
|
|
|
|
|