這是一個相當嚴格地遵循 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);
}
}
?>