IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Conception][nbres aleatoires]equiprobalilité


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut [Conception][nbres aleatoires]equiprobalilité
    Bonjour,
    je cherche à génèrer des nombres aléatoires compris entre 1 et 10 ( bornes comprises) chaque nombre ayant environ la même fréquence d'apparition; pour celà j'ai écrit le code java dans lequel je génère 100000 nombres aléatoires compris entre 1 et 10 en comptant leur nombre d'apparitions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public class Aleat{
        public static void main ( String [ ] args ) {
     
            int nbOccurs [ ] = new int [ 10 ];
     
            for ( int i=1;i<=100000;i++){
                long nb =  Math.round ( 9 * Math . random (  ) + 1 ) ;
                nbOccurs [ (int)nb -1  ] ++ ;
            }
            for ( int i=0;i<10;i++){
                System.out.println ( i+1+":"+nbOccurs[i]);
            }
        }
    }
    Voici les résultats obtenus au cours des deux essais successifs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    C:\JPParsy\java\aleat>java Aleat
    1:5664
    2:11092
    3:11114
    4:11166
    5:11054
    6:11197
    7:11089
    8:10974
    9:11210
    10:5440
     
    C:\JPParsy\java\aleat>java Aleat
    1:5483
    2:10990
    3:11092
    4:11182
    5:10970
    6:11145
    7:11137
    8:11074
    9:11290
    10:5637
    Les résultats sont incorrects pour les deux extrémités 1 et 10.

    Je pense que c'est un problème d'arrondi.

    :

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Essaye ça je pense que ça devrait aller mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long nb =  (long) Math.floor( 10 * Math . random (  ) +1 ) ;

  3. #3
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Ne serait-il pas plus judicieux d'utiliser la classe java.util.Random et sa méthode nextInt(int n) où n indique l'intervalle à prendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Random r=new Random();
    int nb=r.nextInt(10)+1;
    ...
    ?

  4. #4
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Lis ca : http://java.sun.com/docs/books/effective/excursion-random.html

    Les nombres dits "aleatoires" en informatique sont en fait pseudo-aleatoires. On observe par exemple des repartitions interessantes en utilisant des petites puissances de deux comme extremite.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut [nbres aleatoires]equiprobalilité
    Merci pour vos réponses,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Aleat1{
        public static void main ( String [ ] args ) {
            int nbOccurs [ ] = new int [ 10 ];
            for ( int i=1;i<=100000;i++){
                long nb =  (long) Math.floor( 10 * Math . random (  ) +1 ) ;
                nbOccurs [ (int)nb -1  ] ++ ;
            }
            for ( int i=0;i<10;i++){
                System.out.println ( i+1+":"+nbOccurs[i]);
            }
        }
    }
    donne les résultats
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Aleat1{
        public static void main ( String [ ] args ) {
            int nbOccurs [ ] = new int [ 10 ];
            for ( int i=1;i<=100000;i++){
                long nb =  (long) Math.floor( 10 * Math . random (  ) +1 ) ;
                nbOccurs [ (int)nb -1  ] ++ ;
            }
            for ( int i=0;i<10;i++){
                System.out.println ( i+1+":"+nbOccurs[i]);
            }
        }
    }
    En utilisant nextInt de java 1.5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    import java.util.*;
    public class Aleat2{
        public static void main ( String [ ] args ) {
            int nbOccurs [ ] = new int [ 10 ];
            Random r=new Random();
            for ( int i=1;i<=100000;i++){
                int nb=r.nextInt(10)+1; 
                nbOccurs [ nb -1  ] ++ ;
            }
            for ( int i=0;i<10;i++){
                System.out.println ( i+1+":"+nbOccurs[i]);
            }
        }
    }
    on obtient


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    C:\JPParsy\java\aleat>java Aleat2
    1:10081
    2:10092
    3:9939
    4:9926
    5:9963
    6:10075
    7:10012
    8:9898
    9:10066
    10:9948
     
    C:\JPParsy\java\aleat>java Aleat2
    1:9924
    2:9980
    3:9941
    4:10014
    5:10103
    6:9894
    7:10014
    8:10098
    9:10023
    10:10009
    Egalement merci pour le lien



+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Perl choisir un nbre ou mot en aleatoire
    Par snufx dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2007, 12h33
  2. [Conception] nbre total de visiteurs ?
    Par jophp dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/10/2006, 14h30
  3. [Conception] affichage aleatoire d'une image
    Par bellebiquette dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 24/02/2006, 22h58
  4. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  5. nombre aleatoire
    Par Bob dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2002, 18h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo