On s'intéresse au premier chiffre significatif n d'un nombre aléatoire distribué uniformément dans [0,1[
( on l'obtient avec Math.random() ) ; ainsi pour
0,0034896897 on a n=3.
En faisant une étude statistiques sur 1000 nombres aléatoires, on peut conjecturer que les mille valeurs de
nobtenues
sont équiréparties entre les chiffres 1,2,3,…,9 . Vous pouvez le vérifier en cliquant sur
Test simple.
Maintenant, l'expérience consiste à calculer le produit de 20 nombres aléatoires (distribution uniforme sur [0;1[) , on appelle n le
premier chiffre significatif de ce produit et N la variable aléatoire qui associe n à chaque expérience.
Une étude statistique montre que ce n'est
plus une répartition équilibrée mais que l'événement N=1 est le plus courant et le cas N=9
est le plus rare. La loi de N semble «proche» de la loi de Benford, c'est-à-dire de p(N=k)=log(1+1/k) .
Vous pouvez vérifier cela en cliquant sur Nouvelle simulation.
Si l'on remplace 20 par 2, la loi de N semble assez différente de la loi de Benford ;
ce cas est traité ici .
Pour les produits de 3 nombres aléatoires, la loi de N colle beaucoup mieux à celle de Benford.
function ben()
{
var count1=0;
var count2=0;
var count3=0;
var count4=0;
var count5=0;
var count6=0;
var count7=0;
var count8=0;
var count9=0;
var nbprod=1;
nbprod =document.machineBen.entree.value;
var liste=new Array();
var res=0;
// p compte les simulations
for (var p=0;p<1000;p++)
{
var prod=1;
// a compte les nbs aléatoires
for (var a=0;a<nbprod ;a++)
{
prod=prod * Math.random();
}
//on prend le premier chiffre significatif
res=parseInt(prod.toExponential());
switch (res)
{ case 9: count9 ++; break;
case 8: count8 ++; break;
case 7: count7 ++; break;
case 6: count6 ++; break;
case 5: count5 ++; break;
case 4: count4 ++; break;
case 3: count3 ++; break;
case 2: count2 ++; break;
case 1: count1 ++; break;
}
}
document.machineBen.count1.value=count1/1000;
document.machineBen.count2.value=count2/1000;
document.machineBen.count3.value=count3/1000;
document.machineBen.count4.value=count4/1000;
document.machineBen.count5.value=count5/1000;
document.machineBen.count6.value=count6/1000;
document.machineBen.count7.value=count7/1000;
document.machineBen.count8.value=count8/1000;
document.machineBen.count9.value=count9/1000;
}
0.000456 en 4.56e-4.
Puis parseInt() prend le nombre entier qui commence la chaîne de caractère et s'arrête dès qu'un caractère
invalide (ici .) apparaît. On obtient donc 4.