Bonjour,
J'ai rencontré un problème inattendu.
Je voulais faire une simulation avec un très petit pourcentage de réussite, en l'occurrence 31 pour 10000.
J'ai écrit la ligne suivante
if (MulDiv(rand(),10000,RAND_MAX) < 31) NbM[nbe]++;
Contexte Borland Builder. MulDiv est prévu pour faire ce type d'opération sans perte de précision.
J'ai obtenu des résultats légèrement inférieurs (1.4%) à ce qui était prévu
Ensuite, j'ai essayé l'utilisation de la fonction random()
if (random(10000) < 31) NbM[nbe]++; // Ca c'est bon
Là il semble que les résultats sont conformes à ce qui est prévu.
A noter que dans le cas de l'utilisation de rand() et RAND_MAX, on risque un débordement avec des entiers, ce qui donnerait une valeur fausse non signalée, si on effectue l'opération telle quelle.
Quelqu'un a-t-il déjà rencontré ce problème ?
-----