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 <stdio.h> e <stdlib.h>. (Obs: estou usando apenas para testar e imprimir em tela, depois irei remover )
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:
[code]#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”);
}[/code]
quando eu rodo da 1ª vez ele me traz o resultado:
[quote]7
49
73
58
30
e por aí vai[/quote]
quando 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