Bonjour !
En m'inspirant de la bibliothèque Math::CDF de Perl, j'essaie de calculer une
probabilité cumulative binomiale.
Le source suivant fonctionne très bien pour de petites valeurs mais si la valeur n est trop élevée, cela produit des erreurs d'overflow dus évidemment aux factorielles qu'implique le calcul.
J'ai essayé des algorithmes d'approximation qui évitent les problèmes d'overflow mais alors les résultats produits me semblent très éloignés
de ce qui est prévu.
Avez-vous une suggestion ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 function ProbBinomiale($s, $n, $p){ $x = 1.0 - $p; $a = $n - $s; $b = $s + 1.0; $c = $a + $b -1.0; $prob =0; for($i = $a ; $i <= $c ; $i++) $prob += $this->nfact($c) / ($this->nfact($i)*$this->nfact($c-$i)) * pow($x, $i) * pow((1 - $x), ($c - $i)); $prob = round($prob, 4); return $prob; }
Partager