30

Y'a pire quand même, c'est une fct rand()...

31

Ca dépend de ce dont on a besoin. Si Vertyos en a besoin pour qqch de très spécifique, on peut probablement améliorer la vitesse...

Vertyos> tu t'en sers comment de rand()? Tu ne te sers pas des 32768 valeurs?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

32

int rand(void) // RAND_MAX assumed to be 32767
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % 32768;
}

pkoi pas:

ushort rand(void)
{
static ushort next = (next<<8 - 253 )>>1;
return next&1024;
}
pour un rand entre 0 et 1024?
genre ce serait bcp bcp plus rapide et aussi equiprobabiliste que l'autre non?

33

Euh ta routine est franchement pas équiprobabiliste roll

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

34

Une adaption assez directe de l'exemple ISO, pour un rand() modulo 1024 :

int rand(void) {
next = 15149*next + 1234;
return (next>>3)&1023;
}

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

35

en effet on doit trouver que des nombres impaires, mais je pense qu'il suffit de pas grand chose pour obtenir qqc de correcte..

36

Euh...
Si on réécrit ta fonction de changement de seed, c'est

f(x) = (x<<7) + (x&1) - 127

autrement dit, modulo 1024,

f(x) = ((x&7)<<7) + (x&1) - 127

Modulo 8, on a :

f(x) = (x&1) - 127 = (x&1) + 1 = (x&1)+1

Et modulo 2 :
f(x) = ((x+1)&1)

Autrement dit :

f(f(x)) = (((x&1)+1)<<7) + ((x+1)&1) - 127 modulo 1024
(modulo 8, ((x+1)&1)+1 ; modulo 2, (x&1))

f(f(f(x))) = ((((x+1)&1)+1)<<7) + (x&1) - 127 modulo 1024

et ainsi de suite :

f(f(f(f(x)))) = (((x&1)+1)<<7) + ((x+1)&1) - 127 modulo 1024

Et, ô comme c'est bizarre, on reconnaît f(f(x)) ...

Donc en gros la suite fait x,f(x),f(f(x)),f(f(f(x))),f(f(x)),f(f(f(x))),f(f(x)),f(f(f(x))),... roll

Et plus important encore, ça ne dépend que de la parité de x à partir du rang 2 embarrassed

Ne me fais pas croire que c'est équiprobable grin

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

37

Pollux
: Vertyos> tu t'en sers comment de rand()? Tu ne te sers pas des 32768 valeurs?

Jusque là étant donné que j'utilisais la fonction rand() de TIGCC, je randomizais une valeur puis j'utilisais tous ses bits comme des booleens, puis un nouveau rand() dès que tous les bits ont été testés.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

38

Ne me fais pas croire que c'est équiprobable

ya ptetre qqs modif, mais je pense que l'on pourait faire qqc dans ce genre

39

Vertyos> si tu ne veux un rand() que pour choisir entre 0 et 1, je pense que ça peut être pas mal efficace :

asm {
rand01:
  lea next,a0
  move.w (a0),d0
  add.w d0,d0
  bcs \zero
  eor.w #0xB561,d0
  move.w d0,(a0)
  moveq #1,d0
  rts
\zero
  move.w d0,(a0)
  moveq #0,d0
  rts
};


« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

40

La syntaxe en {} c'est du GTC je présume ? wink

Merci pour le truc, j'essayerais smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

41

oui, c'est du gtc.
Enfin, ca se retrouve aussi dans pas mal de compilos PC ...