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

Signaler
Messages postés
6
Date d'inscription
samedi 17 février 2007
Statut
Membre
Dernière intervention
30 janvier 2009
-
Messages postés
11
Date d'inscription
vendredi 18 juin 2010
Statut
Membre
Dernière intervention
15 mai 2011
-
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

5 réponses

Messages postés
623
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
11 novembre 2012
968
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
136
Merci

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

CCM 61004 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.
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)
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

si tu veux retourner double: Min + (Math.random() * (Max - Min))
si tu veux retourner int: Min + (int)(Math.random() * ((Max - Min) + 1))
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...