Oi pessoal, estou precisando de uma implementação não viciosa de uma função que gera um número randômico em C e que não utilize nenhum recurso do gcc, ou seja, NÃO utilize bibliotecas
Eu consegui fazer a partir desta referência, sendo que ela é viciosa, ou seja toda vez que eu inicializo ele me dá sempre os mesmos resultados.
Fiz a implementação abaixo:#include <stdio.h>
#include <stdlib.h>
static int randseed = 1;
void srandom(int seed) {
randseed = seed;
}
/*#if sparc && !__SUNPRO_C8*/
#ifdef notdef
#ifdef __svr4__
#define RANDOM "random"
#define RANDSEED "randseed"
#else
#define RANDOM "_random"
#define RANDSEED "_randseed"
#endif
asm("\
.global " RANDOM " ;\
" RANDOM ": ;\
sethi %hi(16807), %o1 ;\
wr %o1, %lo(16807), %y ;\
sethi %hi(" RANDSEED "), %g1 ;\
ld [%g1 + %lo(" RANDSEED ")], %o0 ;\
andcc %g0, 0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %o0, %o2 ;\
mulscc %o2, %g0, %o2 ;\
rd %y, %o3 ;\
srl %o2, 16, %o1 ;\
set 0xffff, %o4 ;\
and %o4, %o2, %o0 ;\
sll %o0, 15, %o0 ;\
srl %o3, 17, %o3 ;\
or %o3, %o0, %o0 ;\
addcc %o0, %o1, %o0 ;\
bneg 1f ;\
sethi %hi(0x7fffffff), %o1 ;\
retl ;\
st %o0, [%g1 + %lo(" RANDSEED ")] ;\
1: ;\
or %o1, %lo(0x7fffffff), %o1 ;\
add %o0, 1, %o0 ;\
and %o1, %o0, %o0 ;\
retl ;\
st %o0, [%g1 + %lo(" RANDSEED ")] ");
#else
int random() {
register int x = randseed;
register int hi, lo, t;
hi = x / 127773;
lo = x % 127773;
t = 16807 * lo - 2836 * hi;
if (t <= 0)
t += 0x7fffffff;
randseed = t;
return (t);
}
#endif
int main() {
printf("\n%d", random() % 100);
printf("\n%d", random() % 100);
printf("\n%d", random() % 100);
printf("\n%d", random() % 100);
printf("\n%d", random() % 100);
printf("\n");
system("PAUSE");
}
7 49 73 58 30 e por aí vaiquando eu rodo pela 2ª vez, o resultado é o mesmo, sendo que preciso que me traga a valores diferentes. se vocês pegarem o código acima do jeito que está ele compila e roda.
alguém conhece alguma referência ou já se envolveu com problema parecido ?
editado: adição da palavra NÃO em negrito acima


