La distribution de Pareto est une distribution de probabilité qui revient beaucoup dans la nature. Il possède de nombreuses propriétés spéciales, telles qu'une moyenne infinie. Dans ce défi, vous allez sortir un nombre échantillonné à partir de cette distribution.
La distribution de Pareto est définie comme étant supérieure ou égale à x
avec probabilité 1/x
, pour tous x
supérieure ou égale à 1.
Par conséquent, un nombre échantillonné à partir de cette distribution est supérieur ou égal à 1 avec probabilité 1, supérieur ou égal à 2 avec probabilité exactement 1/2, supérieur ou égal à 3 avec probabilité exactement 1/3, supérieur ou égal à 11,4 avec probabilité exactement 1 / 11,4, et ainsi de suite.
Puisque vous échantillonnerez cette distribution, votre programme ou fonction ne prendra aucune entrée et produira un nombre aléatoire, avec les probabilités ci-dessus. Cependant, si votre programme ne correspond pas parfaitement aux probabilités ci-dessus en raison d'une impression en virgule flottante, c'est OK. Voir le bas du défi pour plus de détails.
(C'est ce qu'on appelle la distribution de Pareto avec alpha 1 et borne inférieure 1, pour être exact)
Voici 10 exemples tirés de cette distribution:
1.1540029602790338
52.86156818209856
3.003306506971116
1.4875532217142287
1.3604286212876546
57.5263129600285
1.3139866916055676
20.25125817471419
2.8105749663695208
1.1528212409680156
Remarquez comment 5 d'entre eux sont inférieurs à 2 et 5 supérieurs à 2. Comme il s'agit du résultat moyen, il aurait pu être supérieur ou inférieur, bien sûr.
Votre réponse ne doit être correcte que dans les limites de votre type à virgule flottante, type à nombre réel ou tout autre élément que vous utilisez, mais vous devez être en mesure de représenter des nombres avec au moins 3 chiffres décimaux de précision et des nombres jusqu'à 1 000 000 . Si vous ne savez pas si quelque chose va bien, n'hésitez pas à demander.
C'est le golf de code.
Détails sur l'imprécision:
Pour chaque plage
[a, b]
, où1 <= a < b
, la probabilité idéale que l'échantillon tombe dans cette plage est1/a - 1/b
. La probabilité que votre programme produise un nombre dans cette plage doit être0.001
de1/a - 1/b
. SiX
est la sortie de votre programme, il est nécessaire que|P(a <= X <= b) - (1/a - 1/b)| < 0.001
.Notez qu'en appliquant la règle ci-dessus avec
a=1
etb
suffisamment grand, il est vrai que votre programme doit sortir un nombre supérieur ou égal à 1 avec au moins une probabilité de 0,999. Le reste du temps, il peut planter, produireInfinity
ou faire autre chose.
Je suis assez certain que les soumissions existantes du formulaire 1/1-x
ou 1/x
, où x
est un flottant aléatoire dans [0, 1)
ou (0, 1)
ou [0, 1]
, satisfont toutes à cette exigence.