以下是一个严格遵循 PECL 源代码的实现。对于想要使用它但没有扩展的用户以及想要了解发生情况的用户来说,这很有用。
<?php
if (!function_exists('stats_standard_deviation')) {
/**
* 此用户级实现严格遵循实现;
* 它不会尝试以任何方式改进代码或算法。如果您在数组中少于 2 个值,它会引发警告,就像
* 扩展一样(尽管是作为 E_USER_WARNING 而不是 E_WARNING)。
*
* @param array $a
* @param bool $sample [可选] 默认值为 false
* @return float|bool 标准差或错误时的 false。
*/
function stats_standard_deviation(array $a, $sample = false) {
$n = count($a);
if ($n === 0) {
trigger_error("数组具有零个元素", E_USER_WARNING);
return false;
}
if ($sample && $n === 1) {
trigger_error("数组仅具有 1 个元素", E_USER_WARNING);
return false;
}
$mean = array_sum($a) / $n;
$carry = 0.0;
foreach ($a as $val) {
$d = ((double) $val) - $mean;
$carry += $d * $d;
};
if ($sample) {
--$n;
}
return sqrt($carry / $n);
}
}
?>