From: Kalle Sommer Nielsen Date: Mon, 5 May 2008 06:28:03 +0000 (+0000) Subject: Implemented Windows support for asinh(), acosh(), atanh(), log1p() and expm1() +... X-Git-Tag: RELEASE_2_0_0b1~91 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f914d50dd6ddde5af6c61207c16b15fe34cc6fba;p=php Implemented Windows support for asinh(), acosh(), atanh(), log1p() and expm1() + removed Windows check on tests [DOC] Windows support for asinh(), acosh(), atanh(), log1p() and expm1() --- diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index e87207ce73..358e8e821e 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -1923,26 +1923,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) @@ -1974,19 +1968,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) @@ -3330,23 +3320,11 @@ 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 3a207d250b..6e43e7ac0c 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -49,6 +49,66 @@ 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) U Return the absolute value of the number */ PHP_FUNCTION(abs) @@ -295,8 +355,6 @@ PHP_FUNCTION(tanh) } /* }}} */ -#if !defined(PHP_WIN32) && !defined(NETWARE) -#ifdef HAVE_ASINH /* {{{ proto float asinh(float number) U Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number */ PHP_FUNCTION(asinh) @@ -307,12 +365,10 @@ PHP_FUNCTION(asinh) return; } - RETURN_DOUBLE(asinh(num)); + RETURN_DOUBLE(php_asinh(num)); } /* }}} */ -#endif /* HAVE_ASINH */ -#ifdef HAVE_ACOSH /* {{{ proto float acosh(float number) U Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number */ PHP_FUNCTION(acosh) @@ -323,12 +379,10 @@ PHP_FUNCTION(acosh) return; } - RETURN_DOUBLE(acosh(num)); + RETURN_DOUBLE(php_acosh(num)); } /* }}} */ -#endif /* HAVE_ACOSH */ -#ifdef HAVE_ATANH /* {{{ proto float atanh(float number) U Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number */ PHP_FUNCTION(atanh) @@ -339,11 +393,9 @@ PHP_FUNCTION(atanh) return; } - RETURN_DOUBLE(atanh(num)); + RETURN_DOUBLE(php_atanh(num)); } /* }}} */ -#endif /* HAVE_ATANH */ -#endif /* !defined(PHP_WIN32) && !defined(NETWARE) */ /* {{{ proto float pi(void) U Returns an approximation of pi */ @@ -458,7 +510,6 @@ PHP_FUNCTION(exp) } /* }}} */ -#if !defined(PHP_WIN32) && !defined(NETWARE) /* {{{ proto float expm1(float number) U Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero */ /* @@ -473,11 +524,10 @@ PHP_FUNCTION(expm1) return; } - RETURN_DOUBLE(expm1(num)); + RETURN_DOUBLE(php_expm1(num)); } /* }}} */ -#ifdef HAVE_LOG1P /* {{{ proto float log1p(float number) U Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero */ /* @@ -492,11 +542,9 @@ PHP_FUNCTION(log1p) 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]) U 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 04d47e41c5..2f26e1d681 100644 --- a/ext/standard/php_math.h +++ b/ext/standard/php_math.h @@ -69,23 +69,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 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-- - --INI-- precision = 14 --FILE-- diff --git a/ext/standard/tests/math/acosh_error.phpt b/ext/standard/tests/math/acosh_error.phpt index 83edfc870b..845e051a96 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-- - --FILE-- --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-- - --INI-- precision = 14 --FILE-- diff --git a/ext/standard/tests/math/asinh_error.phpt b/ext/standard/tests/math/asinh_error.phpt index c83b55526e..94d44309d4 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-- - --FILE-- --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-- - --INI-- precision = 14 --FILE-- diff --git a/ext/standard/tests/math/atanh_error.phpt b/ext/standard/tests/math/atanh_error.phpt index 0301400369..5580543cf0 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-- - --FILE-- --INI-- precision = 10 --FILE--