Il est temps de tester vos compétences en mathématiques ...
J'utilise PHP pour trouver la moyenne de $ NUM1, $ NUM2, $ num3 et ainsi de suite; jusqu'à une quantité non définitive de chiffres. Il enregistre ensuite cette moyenne à une base de données.
La prochaine fois que le script PHP est appelé un nouveau numéro est ajouté au mélange.
Existe-t-il une équation mathématique (algèbre la plus probable) que je puisse utiliser pour trouver la moyenne des numéros d'origine avec le nouveau numéro inclus. Ou dois-je enregistrer les numéros d'origine dans la base de données afin que je puisse les interroger et ré-calculer tout le tas de chiffres ensemble?
Si ce que vous entendez en moyenne est moyen et que vous ne voulez pas stocker tous les numéros, puis stockez le nombre de chiffres:
$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
Il suffit de stocker toutes les 3 valeurs, il n'y a pas besoin de quelque chose de compliqué.
Si vous stockez le Average
et Sum
puis calculez Number of values
Vous perdrez une petite précision en raison de la troncature de la moyenne.
Si vous stockez le Average
et Number of values
Puis calculer Sum
vous perdrez encore plus de précision. Vous avez plus de marge pour erreur dans le calcul d'une valeur correcte pour Number of values
que Sum
grâce à cela étant un entier.
<?php
function avrg()
{
$count = func_num_args();
$args = func_get_args();
return (array_sum($args) / $count);
}
?>
Pensais que je devrais partager ma fonction
function avg($sum=0,$count=0){
return ($count)? $sum / $count: NAN;
}
var_dump( avg(array_sum($values),count($values)) );
Retournera la moyenne et prendra également en compte 0, par exemple, la division par zéro retourne toujours Nan (pas un nombre)
1/0 = nan
[.____] 0/0 = nan
Si vous connaissez la quantité de chiffres, vous pouvez calculer l'ancienne somme, ajouter le nouveau et diviser par l'ancien montant plus un.
$oldsum = $average * $amount;
$newaverage = ($oldsum + $newnum) / ($amount + 1);
Typiquement ce que vous pourriez faire est d'économiser deux informations:
Chaque fois que vous voulez avoir la moyenne, divisez la somme par le comte (en prenant soin de l'affaire Count == 0, bien sûr). Chaque fois que vous souhaitez inclure un nouveau numéro, ajoutez le nouveau numéro à la somme et incrémentez le nombre de 1.
Ceci s'appelle une "moyenne opérationnelle" ou ' moyenne mobile '.
Si la base de données stocke la moyenne et , le nombre de valeurs moyennées en moyenne, il sera possible de calculer une nouvelle moyenne exécutée pour chaque nouvelle valeur.