CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

nombre aléatoire ?

aodren
aodren
Niveau 10
26 août 2012 à 22:24:17

Salut a tous.

Je cherche un script shell capable de me pondre un nombre aléatoire, genre un dé électronique.

comment faire? je ne trouve rien dans google.

merci

godrik
godrik
Niveau 30
26 août 2012 à 22:26:54

tu peux utiliser /dev/random mais ca genere en longtemps. Sinon tu peux utiliser $RANDOM en bash.

aodren
aodren
Niveau 10
26 août 2012 à 22:36:01

ok merci, je vais essayer ca.

tu crois qu'avec while, je peux bloquer $RANDOM pour qu'il reste dans les chiffres de 1 à 12?

Meebo
Meebo
Niveau 9
26 août 2012 à 22:40:13

Fais avec l’opérateur modulo.

4223161584
4223161584
Niveau 10
26 août 2012 à 23:00:11

expr $RANDOM % max + min

godrik
godrik
Niveau 30
26 août 2012 à 23:44:28

note en passant que l'alea de $RANDOM est assez mauvais. J'utilisais ca pour tirer des mots aleatoirement dans une appli d'apprentissage de vocabulaire. Et je retombais toujours sur les memes mots.

godrik
godrik
Niveau 30
26 août 2012 à 23:45:29

aussi, les techniques a base de RANDOM/maxrandom*(maxinterval-mininterval)+mininte
rval
marchent mieux (mais c'est casse bonbon a ecrire en bash)

aodren
aodren
Niveau 10
27 août 2012 à 00:17:55

quand je fait avec expr j'obtiens bien un résultat aléatoire.

c=`expr $RANDOM % 12 + 1`; echo $c
5

mais j'arrive pas a utiliser ta ligne "RANDOM/maxrandom*(maxinterval-mininterval)+minint
erval"

a cause des (). comment procéder ?

godrik
godrik
Niveau 30
27 août 2012 à 00:30:58

un truc comme ca a l'air raisonnable. Est ce qu'un forumeur sait faire ce calcul en bash sans passer par bc ?

  1. !/bin/bash

function rand_uniform ()
{
min=$1
max=$2
maxrandom=32767 #$RANDOM is between 0 and 32767 included according to bash(1)

p=$RANDOM
echo "$p / ($maxrandom+1) * ( $max - $min + 1) + $min" | bc -l | sed 's/\..*//'
}

for i in `seq 1 10000`
do
rand_uniform 1 6
done

aodren
aodren
Niveau 10
27 août 2012 à 00:39:29

je te remercie, vu que c'est dans un script et les chiffres sont variable entre 1 et 12 je vais pas me prendre la tête par une autre alternative.

En fait, je me fais un LDVELH a ma sauce avec des dés aléatoires si le joueur en veut.

Donc ca me va très bien.

Merci.

godrik
godrik
Niveau 30
27 août 2012 à 00:43:00

ah, je vois. Tu peux vouloir regarde le programme dicelab, ca permet de faire des etudes interessantes du des regles de jeu different.

aodren
aodren
Niveau 10
27 août 2012 à 06:12:08

Je ne connaissais pas Dicelab, ca a l'air sympa a première vu. je regarderais ce soir plus en profondeur :)

Sankukai
Sankukai
Niveau 10
27 août 2012 à 09:43:05

Pour info, bash ne supporte pas le calcul en virgule flottante. Il faut donc nécessairement passer par un programme externe tel que bc.
Par contre zsh sait faire ça en standard via les commandes standards (let et double parenthèses).

yeti_lambda
yeti_lambda
Niveau 5
27 août 2012 à 12:10:15

"je te remercie, vu que c'est dans un script et les chiffres sont variable entre 1 et 12 je vais pas me prendre la tête par une autre alternative.

En fait, je me fais un LDVELH a ma sauce avec des dés aléatoires si le joueur en veut. "

-> Euh... Si c'est pour simuler un lancer de deux dés, un tirage de nombre aléatoire entre 1 et 12 (censé être équiprobable) c'est pas vraiment ce qu'il y a de plus réaliste :fou:
('fin, c'est un détail qui a pas grand chose à voir avec ton souci technique, mais ça me perturbait de lire ça :noel: )

041
041
Niveau 10
27 août 2012 à 14:17:40

Juste comme ça avec les nombres aléatoire qui sont toujours les memes, une bonne astuce consiste a multiplier ou additionner deux nombre aléatoires, ca réduit de manière considérable le problème

4223161584
4223161584
Niveau 10
27 août 2012 à 18:43:24

C'est pas une très bonne astuce en fait.

aodren
aodren
Niveau 10
27 août 2012 à 19:10:32

ok je prend note.

godrik
godrik
Niveau 30
27 août 2012 à 19:30:36

il faut faire attention avec ce genre de combine. Il y a plein de generateur aleatoire qui sont uniforme dans un espace a une dimension mais qui ne le sont pas dans un espace a plusieurs dimension.
typiquement si tu tire des points aleatoirement avec (en C++ ou java):
Point rand_point()
{
return Point(rand(), rand());
}

Tu aura une distribution dans le plan qui n'est pas aleatoire. Regardez [1] par exemple.

[1] http://random.mat.sbg.ac.at/results/karl/server/node3.html

4223161584
4223161584
Niveau 10
27 août 2012 à 20:14:34

"Il y a plein de generateur aleatoire qui sont uniforme dans un espace a une dimension mais qui ne le sont pas dans un espace a plusieurs dimension."

C'est pas correct de dire ça comme ça. S'il n'est pas uniforme en deux dimensions, il ne l'est pas en une dimension.

Le gros problème des générateurs pseudo aléatoires, c'est leur corrélation.

godrik
godrik
Niveau 30
27 août 2012 à 20:25:26

4223161584, j'imagine que ca depend de ce que tu appelles etre uniforme. Chez moi ca veut dire, ca passe un test du chi-2 ou un test de Kolmogorov-Smirov contre la loi aleatoire uniforme. Ce qui est une definition assez faible, je te l'accorde. Mais c'est suffisant pour la plupart des applications. :)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware