J'ai écris (avec beaucoup de mal), une fonction C qui génère un nombre réel aléatoire (passez si ça ne vous intéresse pas, c'est pas super important) :
J'ai commencé par écrire une fonction qui me génère un octet aléatoire à partir de la fonction rand(), je sais c'est du pseudo aléatoire. Pas grave. Ensuite j'ai généré un nombre réel de cette manière :
- Signe = (+)
- Exposant (puissance de 2) = 0
- Mantisse (valeur comprise dans [0.5;1[) = <généré au hasard>

Les nombres réels sont ceux du coprocesseur arithmétique. Voir la doc Intel :
http://www.intel.com/design/intarch/...entium/fpu.htm
(standard IEEE 754 et 854, réels sur 32, 64 et 80 bits)

Un réel est codé de cette manière : signe*mantisse*2^exposant
signe=1 bit (= +1 ou -1)
mantisse : appartient à [0.5;1[, codé sur un certain nombre de bits dont dépend la précision
exposant : appartient à [EXP_MIN;EXP_MAX], EXP_MIN et EXP_MAX dépendent du format choisi
Le problème est que la mantisse ne peut représenter des valeurs qu'entre 0.5 (inclu) et 1 (exclu). Effectivement, 1.0 = (+1)*0.5*2^1.

Comment rajouter cette valeur ? Si ma mantisse fait 53 bits, j'en génère 54 et je prend la valeur 1.0 que s'ils sont tous posés (= TRUE) ? (et sinon, je tronque le dernier bit) Est-ce que le nombre 1.0 est bien équiprobable dans ce cas-là ?
---
J'ai failli oublié, à la fin ([0.5;1[ -0.5)*2 donne [0;1[ ;-)
@+ Haypo