Математика средняя с php - PullRequest
       13

Математика средняя с php

13 голосов
/ 10 января 2010

Время проверить свои математические навыки ...

Я использую php, чтобы найти среднее значение $ num1, $ num2, $ num3 и т. Д .; до неустановленного количества номеров. Затем это значение сохраняется в базе данных.

В следующий раз, когда php-скрипт вызывается, в микс добавляется новый номер.

Существует ли математическое (наиболее вероятное алгебраическое) уравнение, которое я могу использовать, чтобы найти среднее значение исходных чисел с включенным новым числом. Или мне нужно сохранить исходные числа в базе данных, чтобы я мог запросить их и пересчитать всю совокупность чисел вместе?

Ответы [ 10 ]

51 голосов
/ 16 ноября 2010
array_sum($values) / count($values)
13 голосов
/ 10 января 2010

Если то, что вы подразумеваете под средним значением, означает, что вы не хотите хранить все числа, сохраните количество чисел:

$last_average = 100;
$total_numbers = 10;
$new_number = 54;

$new_average = (($last_average * $total_numbers) + $new_number) / ($total_number + 1);
12 голосов
/ 10 января 2010
Average = Sum / Number of values

Просто сохраните все 3 значения, ничего сложного не нужно.

Если вы сохраните значения Average и Sum, а затем подсчитаете Number of values, вы потеряете немного точности из-за усечения среднего.

Если вы сохраните Average и Number of values, то рассчитайте Sum, и вы потеряете еще большую точность. У вас больше погрешности при расчете правильного значения для Number of values, чем Sum, поскольку оно является целым числом.

4 голосов
/ 05 декабря 2011
<?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

2 голосов
/ 02 августа 2013

Думал, что я должен разделить свою функцию

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

1 голос
/ 10 января 2010

Обычно вы можете сохранить две части информации:

  • сумма всех чисел
  • Количество чисел

Всякий раз, когда вы хотите получить среднее значение, делите сумму на счет (конечно, заботясь о случае счет == 0). Всякий раз, когда вы хотите добавить новый номер, добавьте новый номер к сумме и увеличьте счет на 1.

1 голос
/ 10 января 2010

Если вам известно количество чисел, которые можно рассчитать для старой суммы, добавьте новую и разделите на старую сумму плюс один.

$oldsum = $average * $amount;
$newaverage = ($oldsum + $newnum) / ($amount + 1);
0 голосов
/ 26 октября 2011
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; 
}
0 голосов
/ 10 января 2010

Это называется «скользящее среднее» или « скользящее среднее ».

Если в базе данных хранится среднее и количество усредненных значений, можно будет рассчитать новое скользящее среднее для каждого нового значения.

0 голосов
/ 10 января 2010

Вам необходимо сохранить все оригинальные номера в базе данных.

...