
Envoyé par
samos2
humm
J'ai bêtement bricoler un truc, avec du code que j'ai recuperer a droite a gauche:
1 2 3 4 5 6 7
| int randomint(int min, int max)
{
//srand(time(NULL));
int g_seed = rand()%(max-min) + min;
g_seed = (214013*g_seed+2531011);
return ((g_seed>>16)&0x7FFF)%(max-min) + min;
} |
Elle fonctionne a peut pres bien sauf que je ne la comprend pas bien et quand je met par exemple: min = 0, max = 4 la fonction ne génère jamais de 3...
edit: Le code doit être compatible Windows.
pourquoi avoir mis en commentaire le srand qui sert justement à initialiser la seed afin de générer l'aspect aléatoire ?
Le fait que tu n'aies jamais 3, tu te bases sur quoi ? Ton code peut retourner 3, puisqu'il s'agit d'un modulo 4. Encore faut-il que le nombre généré par rand soit du type 4n+3.
Tu as réalisé 1 000 000 de tests ? des 3 tu en verras 
Enfin, à quoi servent la multiplication, le décalage à droite etc ?
Un code rand simple, que l'on trouve partout sur internet, est le suivant
int rnd(int min, int max) { return rand()%(max-min) + min; }
Mais il faut initialiser la seed du rand auparavant avec srand(time((NULL));Ce qui peut mener à cette fonction seule suivante
1 2 3 4 5 6 7 8 9 10 11 12 13
|
#include <time.h>
#include <math.h>
int rnd(int min, int max)
{
static int init = 0;
if (init == 0)
{
init = 1;
srand(time(NULL));
}
return rand()%(max-min) + min;
} |
http://www.cplusplus.com/reference/c...cstdlib/srand/
http://www.cplusplus.com/reference/c.../cstdlib/rand/
http://www.cplusplus.com/reference/clibrary/ctime/time/
Partager