Generer un nombre réel aleatoirement en java

Résolu/Fermé
ENETCOM Messages postés 16 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 22 juin 2013 - 19 juin 2013 à 23:13
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 20 juil. 2013 à 19:21
Bonjour

aider moi svp je besoin d'un code java qui permet de générer aléatoirement une valeur réel entre l'intervalle[0.5 , 0.85] .
A voir également:

3 réponses

KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
20 juil. 2013 à 19:21
Dans la mesure où tu veux limiter le nombre de décimales, l'idée de BittarAhmad de considérer qu'au final 0.50 et 0.85 ne sont que les entiers 50 et 85 que l'on aurait divisé par 100, ça permet de faire de la génération aléatoire d'entiers :

private static final java.util.Random random = new java.util.Random();

public static double alea(double minInclus, double maxInclus, double precision)
{
    long min = Math.round(minInclus/precision);
    long max = Math.round(maxInclus/precision);
	
    long delta = max-min+1;
    if (delta > Integer.MAX_VALUE)
        throw new IllegalArgumentException("La précision est trop importante !");
	
    long val = min+random.nextInt((int) delta);
	
    return val*precision;
}

Voici un exemple d'utilisation qui va générer un million de valeurs aléatoires et afficher leur fréquence d'apparition. Comme on s'y attend on a bien environ 2.78% pour chacune des valeurs entre 0.50 et 0.85 :

public static void main(String[] args)
{
    java.util.Map<Double,Integer> map = new java.util.TreeMap<Double,Integer>();
    
    for (int i=0; i<1e6; i++)
    {
        Double x = alea(0.50, 0.85, 0.01);
        
        Integer freq = map.get(x);
        map.put(x, freq==null ? 1 : freq+1);
    }
    
    System.out.println("valeur\tfréquence");
    for (java.util.Map.Entry<Double, Integer> entry : map.entrySet())
        System.out.println(entry.getKey()+"\t"+entry.getValue()/1e4);
}
2
yoann090 Messages postés 9180 Date d'inscription mercredi 12 août 2009 Statut Contributeur sécurité Dernière intervention 13 avril 2016 1 689
Modifié par yoann090 le 19/06/2013 à 23:19
1
ENETCOM Messages postés 16 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 22 juin 2013
19 juin 2013 à 23:24
Bonjour yoann090 ,merci mais je besoin de générer un nombre réel entre deux intervalle ,en faite nextInt() permet de générer un entier et math.random permet de générer un nombre entre[0,1] .aider moi svp ,merci d'avance
0
yoann090 Messages postés 9180 Date d'inscription mercredi 12 août 2009 Statut Contributeur sécurité Dernière intervention 13 avril 2016 1 689 > ENETCOM Messages postés 16 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 22 juin 2013
Modifié par yoann090 le 19/06/2013 à 23:38
Ben oui je ne vois pas le problème ?
Math.Random() renvoie une valeur entre 0 et 1, donc par exemple
0,85*(math.random()) renvoie une valeur entre 0 et 0,85 et si tu continues a modifier tu obtiens une valeur entre 0,5 et 0,85
0
ENETCOM Messages postés 16 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 22 juin 2013
19 juin 2013 à 23:42
comment je veut le modifier pour qu'il soit entre [0.5 , 0.85] ,aider moi svp c'est urgent
0
yoann090 Messages postés 9180 Date d'inscription mercredi 12 août 2009 Statut Contributeur sécurité Dernière intervention 13 avril 2016 1 689 > ENETCOM Messages postés 16 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 22 juin 2013
19 juin 2013 à 23:44
Ba reflechi un peu...

Sans doute de la forme : Math.random() * (higher-lower)) + lower;
0
ENETCOM Messages postés 16 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 22 juin 2013 > ENETCOM Messages postés 16 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 22 juin 2013
19 juin 2013 à 23:46
higher:0.85 !!!!
lower:0.5 !!!!
0
BittarAhmad Messages postés 12 Date d'inscription mardi 21 mai 2013 Statut Membre Dernière intervention 25 juillet 2013
19 juil. 2013 à 11:55
Bonjour à tous,

Oui si tu veux générer un nombre aléatoire entre 0.5 0.85 (0.5 inclus et 0.85 inclus), tu peux tout d'abord générer un nombre aléatoire entre 50 et 85, à la fin du divise sur 100.
Voici un code permettant de générer un nombre aléatoire entre [0.5 0.85]:

Random r = new Random();

int valeurmin= 50; //0.5*100

int valeurmax= 85; //0.85*100

int difference = valeurmax-valeurmin;

difference=difference+1; //pour avoir 0.85 inclus aussi

int valeur = valeurmin + r.nextInt( difference); //tu obtient une valeur entre

[50 85]

float valeur1= (float)valeur;

float mu= valeur1/100; //si par exemple tu obtient aléatoirement la valeur

75, donc la valeur 1 sera 0.75 appartenant à [0.5 0.85].

Bon courage,
0