Index: math.c =================================================================== RCS file: /repository/php4/ext/standard/math.c,v retrieving revision 1.41 diff -u -r1.41 math.c --- math.c 6 Jun 2001 13:05:51 -0000 1.41 +++ math.c 31 Jul 2001 23:24:52 -0000 @@ -152,8 +152,6 @@ } } /* }}} */ - - /* {{{ proto double sin(double number) Returns the sine of the number in radians */ @@ -265,6 +263,107 @@ } /* }}} */ +/* {{{ proto double sinh(double number) + Returns the hyperbolic sine of the number, + defined as (exp(number) - exp(-number))/2 */ + +PHP_FUNCTION(sinh) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + return_value->value.dval = sinh((*num)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ +/* {{{ proto double cosh(double number) + Returns the hyperbolic cosine of the number, + defined as (exp(number) + exp(-number))/2 */ + +PHP_FUNCTION(cosh) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + return_value->value.dval = cosh((*num)->value.dval); + return_value->type = IS_DOUBLE; +} +/* }}} */ +/* {{{ proto double tanh(double number) + Returns the hyperbolic tangent of the number, + defined as sinh(number)/cosh(number) */ +PHP_FUNCTION(tanh) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + return_value->value.dval = tanh((*num)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ +/* {{{ proto double asinh(double number) + Returns the inverse hyperbolic sine of the number, + i.e. the value whose hyperbolic sine is number */ + +PHP_FUNCTION(asinh) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + return_value->value.dval = asinh((*num)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ +/* {{{ proto double acosh(double number) + Returns the inverse hyperbolic cosine of the number, + i.e. the value whose hyperbolic cosine is number */ + +PHP_FUNCTION(acosh) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + return_value->value.dval = acosh((*num)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ +/* {{{ proto double atanh(double number) + Returns the inverse hyperbolic tangent of the number, + i.e. the value whose hyperbolic tangent is number */ + +PHP_FUNCTION(atanh) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + return_value->value.dval = atanh((*num)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ + /* {{{ proto double pi(void) Returns an approximation of pi */ @@ -307,6 +406,76 @@ } /* }}} */ +/* {{{ proto double exp2(double number) + Returns 2 raised to the power of the number */ + +PHP_FUNCTION(exp2) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + // libc function is broken in RH Linux 6.1, glibc 2.1.3 + //return_value->value.dval = exp2((*num)->value.dval); + return_value->value.dval = pow(2.0,(*num)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ +/* {{{ proto double exp10(double number) + Returns 10 raised to the power of the number */ + +PHP_FUNCTION(exp10) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + // libc function is broken in RH Linux 6.1, glibc 2.1.3 + //return_value->value.dval = exp10((*num)->value.dval); + return_value->value.dval = pow(10.0,(*num)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ +/* {{{ proto double expm1(double number) + Returns exp(number) - 1, computed in a way that accurate even when + the value of number is close to zero */ + +PHP_FUNCTION(expm1) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + return_value->value.dval = expm1((*num)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ +/* {{{ proto double log1p(double number) + Returns log(1 + number), computed in a way that accurate even when + the value of number is close to zero */ + +PHP_FUNCTION(log1p) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + return_value->value.dval = log1p((*num)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ /* {{{ proto double log(double number) Returns the natural logarithm of the number */ @@ -323,6 +492,24 @@ } /* }}} */ +/* {{{ proto double log2(double number) + Returns the base-2 logarithm of the number */ + +PHP_FUNCTION(log2) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + // libc function is broken in RH Linux 6.1, glibc 2.1.3 + //return_value->value.dval = log2((*num)->value.dval); + return_value->value.dval = log((*num)->value.dval)/log(2.0); + return_value->type = IS_DOUBLE; +} + +/* }}} */ /* {{{ proto double log10(double number) Returns the base-10 logarithm of the number */ @@ -355,6 +542,40 @@ } /* }}} */ +/* {{{ proto double cbrt(double number) + Returns the cubic root of the number */ + +PHP_FUNCTION(cbrt) +{ + zval **num; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num); + return_value->value.dval = cbrt((*num)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ +/* {{{ proto double hypot(double num1, double num2) + Returns sqrt( num1*num1 + num2*num2) */ + +PHP_FUNCTION(hypot) +{ + zval **num1, **num2; + + if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &num1, &num2) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(num1); + convert_to_double_ex(num2); + return_value->value.dval = hypot((*num1)->value.dval, (*num2)->value.dval); + return_value->type = IS_DOUBLE; +} + +/* }}} */ + /* {{{ proto double deg2rad(double number) Converts the number in degrees to the radian equivalent */