Generer un nombre réel aleatoirement en java

[Résolu/Fermé]
Signaler
Messages postés
16
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
22 juin 2013
-
Messages postés
16410
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 octobre 2021
-
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] .

3 réponses

Messages postés
16410
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 octobre 2021
2 904
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
Merci

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

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
9158
Date d'inscription
mercredi 12 août 2009
Statut
Contributeur sécurité
Dernière intervention
13 avril 2016
1 748
Messages postés
9158
Date d'inscription
mercredi 12 août 2009
Statut
Contributeur sécurité
Dernière intervention
13 avril 2016
1 748 >
Messages postés
16
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
22 juin 2013

https://openclassrooms.com/forum/sujet/arondir-a-2-chiffres-apres-la-virgule-69259

NumberFormat je le conseil pas trop si tu dois te resservir du nombre generé.
Messages postés
16
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
22 juin 2013
>
Messages postés
16
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
22 juin 2013

j'utilise ce truc :
double nombre = Math.round(val * Math.pow(10,2)) / Math.pow(10,2);
et ça marche :) j'espère que tous va bien
Messages postés
9158
Date d'inscription
mercredi 12 août 2009
Statut
Contributeur sécurité
Dernière intervention
13 avril 2016
1 748 >
Messages postés
16
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
22 juin 2013

Nickel alors. ;)
Messages postés
16
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
22 juin 2013
>
Messages postés
16
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
22 juin 2013

merci beaucoup yoann090 pour votre aide :)
Messages postés
9158
Date d'inscription
mercredi 12 août 2009
Statut
Contributeur sécurité
Dernière intervention
13 avril 2016
1 748 >
Messages postés
16
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
22 juin 2013

De rien.
Messages postés
12
Date d'inscription
mardi 21 mai 2013
Statut
Membre
Dernière intervention
25 juillet 2013

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,