move math_standard_deviation and math_variance to the stats PECL extension

This commit is contained in:
Andrey Hristov 2005-05-13 10:11:19 +00:00
parent 66a821a763
commit 0e459321bf
4 changed files with 0 additions and 104 deletions

View File

@ -415,8 +415,6 @@ function_entry basic_functions[] = {
PHP_FE(base_convert, NULL)
PHP_FE(number_format, NULL)
PHP_FE(fmod, NULL)
PHP_FE(math_standard_deviation, NULL)
PHP_FE(math_variance, NULL)
#ifdef HAVE_INET_NTOP
PHP_NAMED_FE(inet_ntop, php_inet_ntop, NULL)
#endif

View File

@ -1137,83 +1137,7 @@ PHP_FUNCTION(fmod)
}
/* }}} */
/* {{{ php_population_variance
*/
static long double php_population_variance(zval *arr, zend_bool sample)
{
double mean, sum = 0.0, vr = 0.0;
zval **entry;
HashPosition pos;
int elements_num;
elements_num = zend_hash_num_elements(Z_ARRVAL_P(arr));
zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(arr), &pos);
while (zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), (void **)&entry, &pos) == SUCCESS) {
convert_to_double_ex(entry);
sum += Z_DVAL_PP(entry);
zend_hash_move_forward_ex(Z_ARRVAL_P(arr), &pos);
}
mean = sum / elements_num;
zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(arr), &pos);
while (zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), (void **)&entry, &pos) == SUCCESS) {
double d;
convert_to_double_ex(entry);
d = Z_DVAL_PP(entry) - mean;
vr += d*d;
zend_hash_move_forward_ex(Z_ARRVAL_P(arr), &pos);
}
if (sample) {
--elements_num;
}
return (vr / elements_num);
}
/* }}} */
/* {{{ proto float math_variance(array a [, bool sample])
Returns the population variance */
PHP_FUNCTION(math_variance)
{
zval *arr;
zend_bool sample = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|b", &arr, &sample) == FAILURE) {
return;
}
if (zend_hash_num_elements(Z_ARRVAL_P(arr)) == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The array has zero elements");
RETURN_FALSE;
}
if (sample && zend_hash_num_elements(Z_ARRVAL_P(arr)) == 1) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The array has only 1 element");
RETURN_FALSE;
}
RETURN_DOUBLE(php_population_variance(arr, sample));
}
/* }}} */
/* {{{ proto float math_standard_deviation(array a[, bool sample = false])
Returns the standard deviation */
PHP_FUNCTION(math_standard_deviation)
{
zval *arr;
zend_bool sample = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|b", &arr, &sample) == FAILURE) {
return;
}
if (zend_hash_num_elements(Z_ARRVAL_P(arr)) == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The array has zero elements");
RETURN_FALSE;
}
if (sample && zend_hash_num_elements(Z_ARRVAL_P(arr)) == 1) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The array has only 1 element");
RETURN_FALSE;
}
RETURN_DOUBLE(sqrt(php_population_variance(arr, sample)));
}
/* }}} */
/*
* Local variables:

View File

@ -59,8 +59,6 @@ PHP_FUNCTION(octdec);
PHP_FUNCTION(base_convert);
PHP_FUNCTION(number_format);
PHP_FUNCTION(fmod);
PHP_FUNCTION(math_standard_deviation);
PHP_FUNCTION(math_variance);
PHP_FUNCTION(deg2rad);
PHP_FUNCTION(rad2deg);

View File

@ -1,24 +0,0 @@
--TEST--
math_standard_deviation()/math_variance tests
--FILE--
<?php
$a=array(4, 1, 7);
$dev=math_standard_deviation($a);
var_dump(sprintf("%2.9f", $dev));
var_dump(math_standard_deviation(array()));
$a=array(5,7,8,10,10);
var_dump(math_standard_deviation($a,1));
echo "---Variance---\n";
$a=array(5,7,8,10,10);
var_dump(math_variance($a));
var_dump(math_variance($a, true));
?>
--EXPECTF--
string(11) "2.449489743"
Warning: math_standard_deviation(): The array has zero elements in %s on line %d
bool(false)
float(2.1213203435596)
---Variance---
float(3.6)
float(4.5)