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

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

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

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

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

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

    $last_average = 100; $total_numbers = 10; $new_number = 54; $new_average = (($last_average * $total_numbers) + $new_number) / ($total_number + 1); 
     array_sum($values) / count($values) 
     Average = Sum / Number of values 

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

    Если вы храните Average и Sum тогда вычисляйте Number of values вы потеряете с небольшой точностью из-за усечения Среднего.

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

     <?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

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

     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

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

     $oldsum = $average * $amount; $newaverage = ($oldsum + $newnum) / ($amount + 1); 

    Как правило, вы можете сохранить две части информации:

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

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

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

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

     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; } 

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