bonjour,
La variable %random% réagit étrangement lorsqu'on la combine à un modulo dans un batch.
dans un invite de commande, ceci marche très bien :
Elle retourne un nombre pseudo aléatoire compris entre 0 et 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part set /a n="%random%%2"
Dans un batch du type ci-dessous, les nombres générés sont de l'ordre de plusieurs milliers.
J'ai créé un petit batch qui calcule des stats pour comparer des nombres générés avec et sans modulo :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 @echo off set /a n="%random%%2" echo n=%n% pause
voici le genre de résultat que j'obtiens :
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
25
26 @echo off setlocal enabledelayedexpansion echo tirage du %time%>>c:\random.log set /a m1="0" set /a m2="0" for /l %%i in (1,1,10) do ( set /a n="!random!%2" echo %%i : '!n!' set /a m1+="!n!" set /a m_1="!n!/10" ) echo moyenne1=%m_1% echo modulo 2 : moyenne1=%m_1%>>c:\random.log echo ----- for /l %%i in (1,1,10) do ( set /a n="!random!" echo %%i : '!n!' set /a m2+="!n!" set /a m_2="!m2!/10" ) echo moyenne2=%m_2% echo no modulo : moyenne2=%m_2%>>c:\random.log pause
On voit que le modulo a une influence par rapport au random sans modulo. Entre modulo 2 et modulo 5, la différence n'est pas flagrante...
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
25
26
27 tirage du 10:30:20,42 modulo 2 : moyenne1=2907 no modulo : moyenne2=17915 tirage du 10:30:23,26 modulo 2 : moyenne1=1062 no modulo : moyenne2=16653 tirage du 10:30:25,56 modulo 2 : moyenne1=3110 no modulo : moyenne2=16904 tirage du 10:30:37,35 modulo 5 : moyenne1=2285 no modulo : moyenne2=11856 tirage du 10:30:39,59 modulo 5 : moyenne1=1056 no modulo : moyenne2=12106 tirage du 10:30:41,60 modulo 5 : moyenne1=3103 no modulo : moyenne2=15634 tirage du 10:30:52,89 modulo 10 : moyenne1=28942 no modulo : moyenne2=15375 tirage du 10:30:54,85 modulo 10 : moyenne1=16646 no modulo : moyenne2=15626 tirage du 10:30:56,25 modulo 10 : moyenne1=4349 no modulo : moyenne2=15877
Comment fait-on pour générer un nombre entre 0 et 10 par exemple, dans un batch alors?
Partager