web-dev-qa-db-fra.com

Moyenne mathématique avec PHP

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?

15
Marcus

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);
13
slebetman
array_sum($values) / count($values)
52
Isra
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.

12
Mike
<?php
function avrg()
{
 $count = func_num_args();
 $args = func_get_args();
 return (array_sum($args) / $count);
}
?>

http://php.net/manual/fr/function.array-sum.php#101727

4
Hamidreza

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

2
Timo Huovinen

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);
1
johannes

Typiquement ce que vous pourriez faire est d'économiser deux informations:

  • la somme de tous les chiffres
  • le nombre de nombres

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.

1
Greg Hewgill

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.

0
pavium