Средняя математика с php
Время проверки ваших математических навыков...
Я использую php для поиска среднего числа $num1, $num2, $num3 и т.д.; до неустановленного количества цифр. Затем он сохраняет это среднее значение в базе данных.
В следующий раз, когда php script называется новым номером, добавляется в микс.
Есть ли математическое уравнение (скорее всего алгебра), которое я могу использовать, чтобы найти среднее значение исходных чисел с включенным новым числом. Или мне нужно сохранить исходные номера в базе данных, чтобы я мог запросить их и пересчитать всю совокупность чисел вместе?
Ответы
Ответ 1
Если то, что вы подразумеваете под средним значением, является средним, и вы не хотите хранить все числа, то сохраняйте количество чисел:
$last_average = 100;
$total_numbers = 10;
$new_number = 54;
$new_average = (($last_average * $total_numbers) + $new_number) / ($total_number + 1);
Ответ 2
array_sum($values) / count($values)
Ответ 3
Average = Sum / Number of values
Просто сохраните все 3 значения, не нужно ничего сложного.
Если вы сохраните Average
и Sum
, затем вычислите Number of values
, вы потеряете небольшую точность из-за усечения Среднего.
Если вы сохраните Average
и Number of values
, тогда вычислите Sum
, вы потеряете еще большую точность. У вас больше погрешности при вычислении правильного значения для Number of values
, чем Sum
, благодаря тому, что оно является целым числом.
Ответ 4
<?php
function avrg()
{
$count = func_num_args();
$args = func_get_args();
return (array_sum($args) / $count);
}
?>
http://php.net/manual/en/function.array-sum.php#101727
Ответ 5
Думал, что я должен поделиться своей функцией
function avg($sum=0,$count=0){
return ($count)? $sum / $count: NAN;
}
var_dump( avg(array_sum($values),count($values)) );
Вернет среднее значение, а также учтут 0, например, деление на ноль всегда возвращает NaN (не число)
1/0 = NaN
0/0 = NaN
Ответ 6
Если вы знаете количество чисел, вы можете рассчитать старую сумму, добавьте новую и разделите на старую сумму плюс одну.
$oldsum = $average * $amount;
$newaverage = ($oldsum + $newnum) / ($amount + 1);
Ответ 7
Как правило, вы можете сохранить две части информации:
- сумма всех чисел
- количество чисел
Всякий раз, когда вы хотите получить среднее значение, разделите сумму на счетчик (конечно, обратите внимание на случай count == 0). Всякий раз, когда вы хотите включить новый номер, добавьте новый номер в сумму и увеличивайте счет на 1.
Ответ 8
Это называется "текущим средним" или " скользящим средним.
Если в базе данных хранятся средние значения и, количество усредненных значений, можно будет вычислить новое среднее значение для каждого нового значения.
Ответ 9
function avgvals($avg_vals,$avg_delimiter=',') {
if ( (is_string($avg_vals) && strlen($avg_vals) > 2) && (is_string($avg_delimiter) && !empty($avg_delimiter)) ) {
$average_vals = explode($avg_delimiter, $avg_vals);
$return_vals = ( array_sum($average_vals) / count($average_vals) );
} elseif ( (is_string($avg_vals) && strlen($avg_vals) <= 2) && (is_string($avg_delimiter) && !empty($avg_delimiter)) ) {
$return_vals = $avg_vals;
} else {
$return_vals = FALSE;
}
return $return_vals;
}
Ответ 10
Вам нужно сохранить все исходные номера в базе данных.