mirror of
https://github.com/php/php-src.git
synced 2025-01-18 09:43:36 +08:00
move math_standard_deviation and math_variance to the stats PECL extension
This commit is contained in:
parent
66a821a763
commit
0e459321bf
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
Loading…
Reference in New Issue
Block a user