Generer un nombre réel aleatoirement en java

Résolu
ENETCOM Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 9181 Date d'inscription   Statut Contributeur sécurité Dernière intervention   1 690
 
1
ENETCOM Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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 9181 Date d'inscription   Statut Contributeur sécurité Dernière intervention   1 690 > ENETCOM Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 9181 Date d'inscription   Statut Contributeur sécurité Dernière intervention   1 690 > ENETCOM Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
Ba reflechi un peu...

Sans doute de la forme : Math.random() * (higher-lower)) + lower;
0
ENETCOM Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   > ENETCOM Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
higher:0.85 !!!!
lower:0.5 !!!!
0
BittarAhmad Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
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