--
Certo.
Mas note que são números *pseudo*aleatórios, não são números
aleatórios. O gerador gera uma sequência que é difícil de ser
prevista, mas é uma sequência. Imagine que o "seed" diz aonde nessa
sequência você inicia. A partir daí, cada chamada ao random pega o
próximo número da sequência.
--Stephen
Sent from my Emacs
2010/10/22 Elvio Gomes <elv...@gmail.com>:
> Amigo, acredito que em nenhuma linguagem ou tecnologia seja possível gerar
> um número aleatório de verdade, ainda, esse inclusive é o grande diferencial
> da computação quântica.
>
--
-alex
http://www.artisancoder.com/
Saudações,
Henrique Becker
Em 22/10/10, Lucas Parrini<lucas....@parrini.com.br> escreveu:
Contanto que envolva Lua, sim.
Aqui vai outra dica: o binding do gerador Mersenne Twister, do lhf,
http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/5.1/lrandom.tar.gz
Luiz, por que a rotina "value" gera numeros uniformes com 53 bits de
resolucao (em vez de 32)? Acho que seja mais comum usar a rotina genrand_real2
em vez de genrand_res53, nao? Voce tem algum motivo ou referencia que
recomende esse uso?
Falou,
K.
--
Computers are useless. They can only give you answers.
-- Pablo Picasso
--
Luis Carvalho (Kozure)
lua -e 'print((("lexca...@NO.gmail.SPAM.com"):gsub("(%u+%.)","")))'
Uma CPU não consegue, mas basta adicionar hardware especializado.
Afinal, fenômenos quânticos não estão restritos a computadores
quânticos.
http://en.wikipedia.org/wiki/Hardware_random_number_generator
Os n�meros de Lua s�o double, com matissa de 53 bits. Assim, "value"
retorna um n�mero entre 0 e 1 com todos os bits da mantissa aleat�rios.
Al�m disso, genrand_res53 faz parte do c�digo original de random.c.
Esse mesmo binding funciona outros geradores, e.g. o taus88 descrito em
http://www.ams.org/journals/mcom/1996-65-213/S0025-5718-96-00696-5/home.html
Basta usar o c�digo abaixo em vez de random.c.
typedef struct { unsigned long s1, s2, s3; } TAUSS;
#define s1 c->s1
#define s2 c->s2
#define s3 c->s3
static double taus88(TAUSS *c)
{ /* Generates numbers between 0 and 1. */
unsigned long b;
b = (((s1 << 13) ^ s1) >> 19);
s1 = (((s1 & 4294967294UL) << 12) ^ b);
b = (((s2 << 2) ^ s2) >> 25);
s2 = (((s2 & 4294967288UL) << 4) ^ b);
b = (((s3 << 3) ^ s3) >> 11);
s3 = (((s3 & 4294967280UL) << 17) ^ b);
return ((s1 ^ s2 ^ s3) * 2.3283064365e-10);
}
#define MT TAUSS
#define genrand_res53 taus88
static void init_genrand(MT *c, unsigned long s)
{
s1=s2=s3=s;
}
Sim, mas por essa logica o math.random tambem deveria ter 53 bits de
resolucao, nao? Alem disso, para gerar 53 bits o MT executa genrand_int32 duas
vezes, ou seja, sao gerados 64 bits aleatorios.
> Al�m disso, genrand_res53 faz parte do c�digo original de random.c.
O genrand_real2 tambem. O R (http://www.r-project.org) usa algo equivalente ao
genrand_real3 (na verdade o genrand_real2 e' usado, mas um ajuste para que o
numero esteja em (0,1)). O Octave (http://www.gnu.org/software/octave) nao usa
o MT, mas o gerador deles tem 32 bits de resolucao. Ambos projetos usam a
ranlib ( para gerar numeros de outras distribuicoes (beta, gamma, normal, etc),
e a ranlib usa 32 bits mesmo em precisao dupla.
Agora voltando a Lua: por que math.random usa rand() e nao random()?
Portabilidade? Na man page do rand ha' o seguinte comentario:
"The versions of rand() and srand() in the Linux C Library use the same
random number generator as random(3) and srandom(3), so the lower-order
bits should be as random as the higher-order bits. However, on older
rand() implementations, and on current implementations on different
systems, the lower-order bits are much less random than the higher-
order bits. Do not use this function in applications intended to be
portable when good randomness is needed. (Use random(3) instead.)"
Abracos,
Vejo o seu ponto. Vou ver se numa pr�xima vers�o de lrandom ponho isso
configur�vel.
> Agora voltando a Lua: por que math.random usa rand() e nao random()?
> Portabilidade? Na man page do rand ha' o seguinte comentario:
Pela raz�o de sempre: random n�o � ANSI C. Al�m disso, rand em Linux �
t�o bom quanto random, como diz na man page, de modo que n�o h� por que
temer usar math.random as is.
Ah, claro. Obrigado!
Falou,
Feito. Veja http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/#lrandom