La meilleure façon de le faire est de générer un nombre aléatoire qui est réparti également dans un certain ensemble de nombres, puis d'appliquer une fonction de projection à l'ensemble compris entre 0 et 100, où la projection est plus susceptible d'atteindre les nombres souhaités.
En règle générale, la manière mathématique d'y parvenir consiste à tracer une fonction de probabilité des nombres que vous souhaitez. Nous pourrions utiliser la courbe en cloche, mais pour un calcul plus facile, travaillons simplement avec une parabole retournée.
Faisons une parabole telle que ses racines soient à 0 et 100 sans l'incliner. Nous obtenons l'équation suivante:
f(x) = -(x-0)(x-100) = -x * (x-100) = -x^2 + 100x
Maintenant, toute l'aire sous la courbe entre 0 et 100 est représentative de notre premier ensemble où nous voulons que les nombres soient générés. Là, la génération est complètement aléatoire. Donc, tout ce que nous devons faire est de trouver les limites de notre premier ensemble.
La borne inférieure est, bien sûr, 0. La borne supérieure est l'intégrale de notre fonction à 100, qui est
F(x) = -x^3/3 + 50x^2
F(100) = 500,000/3 = 166,666.66666 (let's just use 166,666, because rounding up would make the target out of bounds)
Nous savons donc que nous devons générer un nombre compris entre 0 et 166 666. Ensuite, nous devons simplement prendre ce nombre et le projeter dans notre deuxième ensemble, qui est compris entre 0 et 100.
Nous savons que le nombre aléatoire que nous avons généré est une intégrale de notre parabole avec une entrée x entre 0 et 100. Cela signifie que nous devons simplement supposer que le nombre aléatoire est le résultat de F (x) et résoudre pour x.
Dans ce cas, F (x) est une équation cubique et sous la forme F(x) = ax^3 + bx^2 + cx + d = 0
, les affirmations suivantes sont vraies:
a = -1/3
b = 50
c = 0
d = -1 * (your random number)
La résolution de ceci pour x vous donne le nombre aléatoire réel que vous recherchez, ce qui est garanti d'être dans la plage [0, 100] et une probabilité beaucoup plus élevée d'être proche du centre que des bords.