diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | ext/standard/basic_functions.c | 23 | ||||
-rw-r--r-- | ext/standard/math.c | 83 | ||||
-rw-r--r-- | ext/standard/php_math.h | 8 | ||||
-rw-r--r-- | ext/standard/tests/math/acosh_basic.phpt | 5 | ||||
-rw-r--r-- | ext/standard/tests/math/acosh_error.phpt | 5 | ||||
-rw-r--r-- | ext/standard/tests/math/acosh_variation.phpt | 5 | ||||
-rw-r--r-- | ext/standard/tests/math/asinh_basic.phpt | 5 | ||||
-rw-r--r-- | ext/standard/tests/math/asinh_error.phpt | 5 | ||||
-rw-r--r-- | ext/standard/tests/math/asinh_variation.phpt | 5 | ||||
-rw-r--r-- | ext/standard/tests/math/atanh_basic.phpt | 5 | ||||
-rw-r--r-- | ext/standard/tests/math/atanh_error.phpt | 5 | ||||
-rw-r--r-- | ext/standard/tests/math/atanh_variation.phpt | 5 |
13 files changed, 68 insertions, 94 deletions
@@ -1,4 +1,4 @@ -PHP NEWS +PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 20??, PHP 5.3.0 - Removed the experimental RPL (master/slave) functions from mysqli. (Andrey) @@ -106,6 +106,7 @@ PHP NEWS - Added request_order INI variable to control specifically $_REQUEST behavior. (Stas) - Added forward_static_call(_array) to complete LSB. (Mike Lively) +- Added Windows support for asinh(), acosh(), atanh(), log1p() and expm1() (Kalle) - Improved PHP runtime speed and memory usage: . Lazy EG(active_symbol_table) initialization. (Dmitry) diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 12aed9f0a3..c85aef1cd9 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -1933,26 +1933,20 @@ ZEND_BEGIN_ARG_INFO(arginfo_tanh, 0) ZEND_ARG_INFO(0, number) ZEND_END_ARG_INFO() -#ifdef HAVE_ASINH static ZEND_BEGIN_ARG_INFO(arginfo_asinh, 0) ZEND_ARG_INFO(0, number) ZEND_END_ARG_INFO() -#endif -#ifdef HAVE_ACOSH static ZEND_BEGIN_ARG_INFO(arginfo_acosh, 0) ZEND_ARG_INFO(0, number) ZEND_END_ARG_INFO() -#endif -#ifdef HAVE_ATANH static ZEND_BEGIN_ARG_INFO(arginfo_atanh, 0) ZEND_ARG_INFO(0, number) ZEND_END_ARG_INFO() -#endif static ZEND_BEGIN_ARG_INFO(arginfo_pi, 0) @@ -1984,19 +1978,15 @@ ZEND_BEGIN_ARG_INFO(arginfo_exp, 0) ZEND_ARG_INFO(0, number) ZEND_END_ARG_INFO() -#if !defined(PHP_WIN32) && !defined(NETWARE) static ZEND_BEGIN_ARG_INFO(arginfo_expm1, 0) ZEND_ARG_INFO(0, number) ZEND_END_ARG_INFO() -# ifdef HAVE_LOG1P static ZEND_BEGIN_ARG_INFO(arginfo_log1p, 0) ZEND_ARG_INFO(0, number) ZEND_END_ARG_INFO() -# endif -#endif /* !defined(PHP_WIN32) && !defined(NETWARE) */ static ZEND_BEGIN_ARG_INFO_EX(arginfo_log, 0, 0, 1) @@ -3291,23 +3281,10 @@ const zend_function_entry basic_functions[] = { /* {{{ */ PHP_FE(sinh, arginfo_sinh) PHP_FE(cosh, arginfo_cosh) PHP_FE(tanh, arginfo_tanh) - -#ifdef HAVE_ASINH PHP_FE(asinh, arginfo_asinh) -#endif -#ifdef HAVE_ACOSH PHP_FE(acosh, arginfo_acosh) -#endif -#ifdef HAVE_ATANH - PHP_FE(atanh, arginfo_atanh) -#endif -#if !defined(PHP_WIN32) && !defined(NETWARE) PHP_FE(expm1, arginfo_expm1) -# ifdef HAVE_LOG1P PHP_FE(log1p, arginfo_log1p) -# endif -#endif - PHP_FE(pi, arginfo_pi) PHP_FE(is_finite, arginfo_is_finite) PHP_FE(is_nan, arginfo_is_nan) diff --git a/ext/standard/math.c b/ext/standard/math.c index 1a76f351d8..903b0c80e1 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -49,6 +49,67 @@ val = !zend_isnan(tmp_val) ? tmp_val : val; \ } \ + +/* {{{ php_asinh +*/ +double php_asinh(double z) +{ +#ifdef HAVE_ASINH + return(asinh(z)); +#else + return(log(z + sqrt(1 + pow(z, 2))) / log(M_E)); +#endif +} +/* }}} */ + +/* {{{ php_acosh +*/ +double php_acosh(double x) +{ +#ifdef HAVE_ACOSH + return(acosh(x)); +#else + return(log(x + sqrt(x * x - 1))); +#endif +} +/* }}} */ + +/* {{{ php_atanh +*/ +double php_atanh(double z) +{ +#ifdef HAVE_ATANH + return(atanh(z)); +#else + return(0.5 * log((1 + z) / (1 - z))); +#endif +} +/* }}} */ + +/* {{{ php_log1p +*/ +double php_log1p(double x) +{ +#ifdef HAVE_LOG1P + return(log1p(x)); +#else + return(log(1 + x)); +#endif +} +/* }}} */ + +/* {{{ php_expm1 +*/ +double php_expm1(double x) +{ +#if !defined(PHP_WIN32) && !defined(NETWARE) + return(expm1(x)); +#else + return(exp(x) - 1); +#endif +} +/* }}}*/ + /* {{{ proto int abs(int number) Return the absolute value of the number */ PHP_FUNCTION(abs) @@ -284,8 +345,6 @@ PHP_FUNCTION(tanh) } /* }}} */ -#if !defined(PHP_WIN32) && !defined(NETWARE) -#ifdef HAVE_ASINH /* {{{ proto float asinh(float number) Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number */ PHP_FUNCTION(asinh) @@ -298,24 +357,20 @@ PHP_FUNCTION(asinh) RETURN_DOUBLE(asinh(num)); } /* }}} */ -#endif /* HAVE_ASINH */ -#ifdef HAVE_ACOSH /* {{{ proto float acosh(float number) Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number */ -PHP_FUNCTION(acosh) +PHP_FUNCTION(php_acosh) { double num; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &num) == FAILURE) { return; } - RETURN_DOUBLE(acosh(num)); + RETURN_DOUBLE(php_acosh(num)); } /* }}} */ -#endif /* HAVE_ACOSH */ -#ifdef HAVE_ATANH /* {{{ proto float atanh(float number) Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number */ PHP_FUNCTION(atanh) @@ -325,11 +380,9 @@ PHP_FUNCTION(atanh) if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &num) == FAILURE) { return; } - RETURN_DOUBLE(atanh(num)); + RETURN_DOUBLE(php_atanh(num)); } /* }}} */ -#endif /* HAVE_ATANH */ -#endif /* !defined(PHP_WIN32) && !defined(NETWARE) */ /* {{{ proto float pi(void) Returns an approximation of pi */ @@ -442,7 +495,6 @@ PHP_FUNCTION(exp) } /* }}} */ -#if !defined(PHP_WIN32) && !defined(NETWARE) /* {{{ proto float expm1(float number) Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero */ /* @@ -456,11 +508,10 @@ PHP_FUNCTION(expm1) if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &num) == FAILURE) { return; } - RETURN_DOUBLE(expm1(num)); + RETURN_DOUBLE(php_expm1(num)); } /* }}} */ -#ifdef HAVE_LOG1P /* {{{ proto float log1p(float number) Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero */ /* @@ -474,11 +525,9 @@ PHP_FUNCTION(log1p) if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &num) == FAILURE) { return; } - RETURN_DOUBLE(log1p(num)); + RETURN_DOUBLE(php_log1p(num)); } /* }}} */ -#endif /* HAVE_LOG1P */ -#endif /* !defined(PHP_WIN32) && !defined(NETWARE) */ /* {{{ proto float log(float number, [float base]) Returns the natural logarithm of the number, or the base log if base is specified */ diff --git a/ext/standard/php_math.h b/ext/standard/php_math.h index 346be97967..b3fd245e75 100644 --- a/ext/standard/php_math.h +++ b/ext/standard/php_math.h @@ -72,23 +72,15 @@ PHP_FUNCTION(rad2deg); */ PHP_FUNCTION(hypot); PHP_FUNCTION(expm1); -#ifdef HAVE_LOG1P PHP_FUNCTION(log1p); -#endif PHP_FUNCTION(sinh); PHP_FUNCTION(cosh); PHP_FUNCTION(tanh); -#ifdef HAVE_ASINH PHP_FUNCTION(asinh); -#endif -#ifdef HAVE_ACOSH PHP_FUNCTION(acosh); -#endif -#ifdef HAVE_ATANH PHP_FUNCTION(atanh); -#endif #include <math.h> diff --git a/ext/standard/tests/math/acosh_basic.phpt b/ext/standard/tests/math/acosh_basic.phpt index 34839ee2fd..d94109d9c1 100644 --- a/ext/standard/tests/math/acosh_basic.phpt +++ b/ext/standard/tests/math/acosh_basic.phpt @@ -1,10 +1,5 @@ --TEST-- Test return type and value for expected input acosh() ---SKIPIF-- -<?php -if(substr(PHP_OS, 0, 3) == "WIN") - die ("skip - function not supported on Windows"); -?> --INI-- precision = 14 --FILE-- diff --git a/ext/standard/tests/math/acosh_error.phpt b/ext/standard/tests/math/acosh_error.phpt index 8402ce54db..cb85becdb1 100644 --- a/ext/standard/tests/math/acosh_error.phpt +++ b/ext/standard/tests/math/acosh_error.phpt @@ -1,10 +1,5 @@ --TEST-- Test wrong number of arguments for acosh() ---SKIPIF-- -<?php -if(substr(PHP_OS, 0, 3) == "WIN" ) - die ("skip - function not supported on Windows"); -?> --FILE-- <?php /* diff --git a/ext/standard/tests/math/acosh_variation.phpt b/ext/standard/tests/math/acosh_variation.phpt index 9865dedd2b..fbcb62a20c 100644 --- a/ext/standard/tests/math/acosh_variation.phpt +++ b/ext/standard/tests/math/acosh_variation.phpt @@ -1,10 +1,5 @@ --TEST-- Test variations in usage of acosh() ---SKIPIF-- -<?php -if(substr(PHP_OS, 0, 3) == "WIN" ) - die ("skip - function not supported on Windows"); -?> --INI-- precision = 10 --FILE-- diff --git a/ext/standard/tests/math/asinh_basic.phpt b/ext/standard/tests/math/asinh_basic.phpt index 61f1731553..ff8a2d10ac 100644 --- a/ext/standard/tests/math/asinh_basic.phpt +++ b/ext/standard/tests/math/asinh_basic.phpt @@ -1,10 +1,5 @@ --TEST-- Test return type and value for expected input asinh() ---SKIPIF-- -<?php -if(substr(PHP_OS, 0, 3) == "WIN") - die ("skip - function not supported on Windows"); -?> --INI-- precision = 14 --FILE-- diff --git a/ext/standard/tests/math/asinh_error.phpt b/ext/standard/tests/math/asinh_error.phpt index c6f7e4f586..8a0d558783 100644 --- a/ext/standard/tests/math/asinh_error.phpt +++ b/ext/standard/tests/math/asinh_error.phpt @@ -1,10 +1,5 @@ --TEST-- Test wrong number of arguments for asinh() ---SKIPIF-- -<?php -if(substr(PHP_OS, 0, 3) == "WIN" ) - die ("skip - function not supported on Windows"); -?> --FILE-- <?php /* diff --git a/ext/standard/tests/math/asinh_variation.phpt b/ext/standard/tests/math/asinh_variation.phpt index eb71af1263..96fbbcb73f 100644 --- a/ext/standard/tests/math/asinh_variation.phpt +++ b/ext/standard/tests/math/asinh_variation.phpt @@ -1,10 +1,5 @@ --TEST-- Test variations in usage of asinh() ---SKIPIF-- -<?php -if(substr(PHP_OS, 0, 3) == "WIN" ) - die ("skip - function not supported on Windows"); -?> --INI-- precision = 10 --FILE-- diff --git a/ext/standard/tests/math/atanh_basic.phpt b/ext/standard/tests/math/atanh_basic.phpt index c259bdb82b..7e7144e239 100644 --- a/ext/standard/tests/math/atanh_basic.phpt +++ b/ext/standard/tests/math/atanh_basic.phpt @@ -1,10 +1,5 @@ --TEST-- Test return type and value for expected input atanh() ---SKIPIF-- -<?php -if(substr(PHP_OS, 0, 3) == "WIN" ) - die ("skip - function not supported on Windows"); -?> --INI-- precision = 14 --FILE-- diff --git a/ext/standard/tests/math/atanh_error.phpt b/ext/standard/tests/math/atanh_error.phpt index 04df2fac82..e442825b0e 100644 --- a/ext/standard/tests/math/atanh_error.phpt +++ b/ext/standard/tests/math/atanh_error.phpt @@ -1,10 +1,5 @@ --TEST-- Test wrong number of arguments for atanh() ---SKIPIF-- -<?php -if(substr(PHP_OS, 0, 3) == "WIN" ) - die ("skip - function not supported on Windows"); -?> --FILE-- <?php /* diff --git a/ext/standard/tests/math/atanh_variation.phpt b/ext/standard/tests/math/atanh_variation.phpt index c2c2681514..4ce9646ebb 100644 --- a/ext/standard/tests/math/atanh_variation.phpt +++ b/ext/standard/tests/math/atanh_variation.phpt @@ -1,10 +1,5 @@ --TEST-- Test variations in usage of atanh() ---SKIPIF-- -<?php -if(substr(PHP_OS, 0, 3) == "WIN" ) - die ("skip - function not supported on Windows"); -?> --INI-- precision = 10 --FILE-- |