[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:
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:
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.
:?:
[nbres aleatoires]equiprobalilité
Merci pour vos réponses,
Code:
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:
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:
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:
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
:D :D :D :D :D