[JAVA] Math.random() [Résolu/Fermé]

Messages postés
6
Date d'inscription
samedi 17 février 2007
Statut
Membre
Dernière intervention
30 janvier 2009
-
Salut tout le monde

svp la valeur retourner avec la méthode Math.random()
en java est comprise entre -

0<= Math.random() <=1

ou

0<= Math.random() <1

ou

0< Math.random() <1


Merci
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
623
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
11 novembre 2012
960
135
Merci
Salut!

Extrait de la Javadoc de la class Math:

@return  a pseudorandom double greater than or equal  to 0.0 and less than 1.0.


Pour Yahyamed:

il n'y a vraiment pas une grande chance d'avoir un nombre plus grand que 1.... je dirais même aucune chance puisque l'implémentation de la foction Math.random() retourn une valeur entre 0 inclu et 1 exclus!

Si tu veux par exemple générer un nombre entier entre 12 (inclus) et 29 (exclus), procède comme ceci:

int lower = 12;
int higher = 29;

int random = (int)(Math.random() * (higher-lower)) + lower;


;-)
HackTrack

Dire « Merci » 135

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 71595 internautes nous ont dit merci ce mois-ci

Salut HackTrack!
j'ai reçu ton message et la méthode que tu as proposé été une bonne solution ça marche tres bien. merci
attention les deux valuers extremes (12 et 29) auront deux fois moins de chance d'etre selectionnees que les autres.
24
Merci
int lower = 12;
int higher = 29;

int random = (int)(Math.random() * (higher+1-lower)) + lower;

et ton probleme est résolu
Salut,

Si tu fais ça, tu inclus peut être 29 mais tu exclus 12. Il suffit donc de faire:

Int lower = 12;
int higher = 29;

higher++;

int random = (int)(Math.random() * (higher-lower)) + lower;

NB: (int) nombre fait une troncature et pas un arrondi. Les nombre extrêmes qui sont 12 et 29 ont autant de chances d'apparaitre que les autres. Pour preuve, System.out.println((int)10.9); renvoie 10.
> Lonely -
Nan, j'ai dit des bêtises ^^ autant pour moi... Ca revient au même en fait.
> Lonely -
Et non ça ne revient pas au même il faut bien mettre le +1 sinon on ne pourra jamais obtenir le 29.
> gayou67 -
Si ca revient au meme,

la seule différence c'est que au lieu de l'additionner dans la ligne de calcul, j'ai incrémenté higher (ecrit en gras)
12
Merci
Petite précision aux réponses très complètes ci dessus.
Math.radom() renvoie une valeur entre 0,.... (c'est à dire une valeur proche de 0 mais positif et de même pour le 1 ce ne pas exactement 1 mais une valeur proche de 1.

Autrement dis :

D'un point de vue mathématique :

On peut modélisé Math.random() comme l'obtention d'une valeur x aléatoirement entre ]0;1[. outre l'imprécision dont on a parlé plus haut. ce modèle diffère d'un point de vue probabiliste par l'absence du concept de densité.

En effet, on rappelle que R est dense dans Z : Ce qui veut dire que quelque soit deux réels différents (appelons les a et b et trions les de la manière suivante a<b) avec a et b compris dans l'intervalle [n;n+1] avec n un entier : Il existe une infinité de réels compris dans l'intervalle [a;b].

Cette densité à pour conséquence qu'un réel peut avoir autant de décimal que l'on désire. Ce qui n'est pas réalisable en informatique.

Donc : prenons z un réel de la forme : n+m.10^-x . Avec n et m des naturel et x un réel. Pour x suffisamment grand (ce cap dépend de l'ensemble sur lequel on travail c'est à dire les double avec Math.rand) z est inconnu de java. Donc la probabilité d'obtenir un résultat appartenant à ]z-e;z+e[ (pour un certain e plus petit qu'un certain cap) est nulle. En réalité l'ensemble des double n'étant pas dense dans lui même la probabilité d'obtenir avec Math.random() un résultat particulier appartenant à la projection des double sur l'intervalle ]pseudo 0 ; pseudo 1[est non-nulle.
Messages postés
11
Date d'inscription
vendredi 18 juin 2010
Statut
Membre
Dernière intervention
15 mai 2011
9
Merci
si tu veux retourner double: Min + (Math.random() * (Max - Min))
si tu veux retourner int: Min + (int)(Math.random() * ((Max - Min) + 1))
4
Merci
je crois que la réponse est 0<= Math.random() <1

mais il y a tellement de possibilité de chiffres que de toute façon, la probabilité d'avoir 0 est infinitésimal, que les bornes soient inclues ou non ne change pas grand chose...