]> granicus.if.org Git - php/commitdiff
Merge PHP_5_3 - Implemented Windows support for asinh(), acosh(), atanh(), log1p...
authorKalle Sommer Nielsen <kalle@php.net>
Mon, 5 May 2008 07:29:41 +0000 (07:29 +0000)
committerKalle Sommer Nielsen <kalle@php.net>
Mon, 5 May 2008 07:29:41 +0000 (07:29 +0000)
[DOC] Merge_5_3

13 files changed:
NEWS
ext/standard/basic_functions.c
ext/standard/math.c
ext/standard/php_math.h
ext/standard/tests/math/acosh_basic.phpt
ext/standard/tests/math/acosh_error.phpt
ext/standard/tests/math/acosh_variation.phpt
ext/standard/tests/math/asinh_basic.phpt
ext/standard/tests/math/asinh_error.phpt
ext/standard/tests/math/asinh_variation.phpt
ext/standard/tests/math/atanh_basic.phpt
ext/standard/tests/math/atanh_error.phpt
ext/standard/tests/math/atanh_variation.phpt

diff --git a/NEWS b/NEWS
index 6c0e7b57bc0e683eb7ef4598cba1cdeb3af01a97..25cacc7914a02aa89f70d6a1d4a4c67f908da584 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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)
index 12aed9f0a3b02f8d6d59ac45b0996ec1e3bd2294..c85aef1cd9493a1e45319871efce58842e37722d 100644 (file)
@@ -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)
index 1a76f351d84976009a44506540a1c4d4102ec08e..903b0c80e1fa2b6b89f63f02b01980f44c832873 100644 (file)
        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 */
index 346be979677e76d96c15427deace45f9d952488c..b3fd245e757bb9b35b4f541abf7b969e324306cd 100644 (file)
@@ -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>
 
index 34839ee2fda65822e25e23b05a3441478b86bdae..d94109d9c192e2ce150f4dcf2f079e1d6ca3ced8 100644 (file)
@@ -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--
index 8402ce54db2962d402718ca8345bde07da0481c3..cb85becdb1f8ad8c197cbf9171f8c11354e29e32 100644 (file)
@@ -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
 /* 
index 9865dedd2b84a97e83fa332e7d9e1429622f5e4b..fbcb62a20cbdb8d87e9d6f869fe89c1196211715 100644 (file)
@@ -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--
index 61f17315536d6558d7070c5fef247629bfb43900..ff8a2d10ac53b55e0662058f464dcfdca97207f6 100644 (file)
@@ -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--
index c6f7e4f586bcaa937be2d28a00b983bd6103b445..8a0d5587831a3012562c7b84f7b8e6a9e385b035 100644 (file)
@@ -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
 /* 
index eb71af126353b5416702ba204ff7b22fabad7597..96fbbcb73fb3a774041e6e0729477a162019577d 100644 (file)
@@ -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--
index c259bdb82bd737a932804582780ae827081636d8..7e7144e23939a85fb4ba4804914495bb0218e5dc 100644 (file)
@@ -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--
index 04df2fac823758aefe374599240597af5d21b7b9..e442825b0ecaaa2b2a26d16702a5fbc991342f71 100644 (file)
@@ -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
 /* 
index c2c26815147c1aa1d4a89ac961225ac73a50b0eb..4ce9646ebbdf2e6d6fefce17086bc077eb8a2264 100644 (file)
@@ -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--