Вопрос

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

Я использую 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 затем рассчитайте Sum Вы потеряете еще большую точность. У вас больше прибыли для ошибки при расчете правильного значения для 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 = Нэн
0/0 = НАН

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top