shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re:_[shell-script]_Como_gerar_n�meros_aleat�rios?


From: moysespr
Subject: Re:_[shell-script]_Como_gerar_números_aleatórios?
Date: Thu, 27 Nov 2003 20:37:06 -0800 (PST)

Oi:
Fiz aqui, no prompt do bash, exatamente o que você citou. Eis o que aconteceu:
expr $((32767*12)) / 32767 + 5
17

Mas, se entendi, na faixa que você citou o 17 não poderia sair. O resultado
deveria ser 16,9... , mas como o resultado é inteiro o limite superior seria
16, o esperado. É isso?


Fracionando:
expr $((32767*11.999)) / 32767 + 5
bash: 32767*11.999: syntax error in expression (error token is ".999")

Agora usando o bc, com grande precisão, para ficar mais claro:
echo "scale=18;(32767*11.999999999999999999/32767)+5"|bc
16.999999999999999999

Entendi que você precisa uma faixa de inteiros, no exemplo de 5 a 16. Se o
universo randômico for fixo, como aqui, acredito que a tradução seja sempre via
regra de três. Daí você terá de dividir  o seu intervalo em exatamente 32767
partes iguais. Como seu universo é muito menor vai ter que fracionar as
unidades para realmente dar a mesma chance a cada inteiro de ocorrer, ou seja,
deverá ter uma faixa de:
5,000 a 16,999 , exclusive o 17,000

Daí, penso que terá de fazer operações com números fracionários, ou mutiplicar
todos os termos por 1000 ou 100000 para tentar evitar o uso de um auxiliar como
o bc.

Catei dos meus alfarrábios uma opção com 1000000 de possibilidades usando
nanosegundos (ou melhor, micro) do date. Entropia??? Acho que isto justificaria
apenas se seus intervalos tivessem mais de 32767 possibilidades, mas já que
está com a mão na massa, se quiser brincar:
n1=4;n2=33;echo "`date +%N|cut -c1-6`*($n2-$n1+1)/999999 +$n1"|bc

Imagine, agora que escrevi tudo isto, me ocorreu que deveria ser feita a
divisão pelo número de elementos do universo que, de 0 a 32767 são 32768.
Talvez só isso resolva o detalhe daquele 17. Se for dessa forma, até essa opção
com date não deve estar ok. Fiquei na dúvida, agora também aguardo outras
opiniões.

.



--- Pablo Fernandes <address@hidden> wrote:
> Joia fernando, muito obrigado :D
>  
> mas se, em uma grande sorte a variável $RANDOM gerar o seu inteiro máximo
> (32767) vai dar certo?
> digamos que eu queria um numero aleatorio entre 5 e 16 (o intervalo entre
> eles seria 12 contando com cada um deles).
>  
> $ expr $(($RANDOM*12)) / 32767 + 5
> se nesse caso $RANDOM for 32767 o resultado disso sairia 17! ou estou errado?
> Na calculadora deu 17, mas no shell, o 17 nao sai de jeito nenhum! Pq
> acontece isso?
>  
> Pablo Fernandes
> 
> Fernando Lemes da Silva <address@hidden> wrote:
> 
> Utilize a variavel $RANDOM (em maiuscula !!!)... ela gera um numero
> aleatorio entre 0 e 32767 (se eu estiver errado me corrijam, por
> favor...)... cabe a voce multiplicar o intervalo entre os numeros pelo
> numero randomico e dividir por 32767 e somar o primeiro inteiro para obter o
> randomico adaptado ao intervalo.
> 
> []'s
> Fernando Lemes
> 
> 
> ----- Original Message ----- 
> From: "Pablo Fernandes" 
> To: 
> Sent: Tuesday, November 25, 2003 10:57 PM
> Subject: [shell-script] Como gerar números aleatórios?
> 
> 
> Caros amigos,
> 
> Eu gostaria de saber como faço para gerar números aleatórios. Mais ou menos
> assim:
> (rv seria o nome do script)
> $ rv 3
> 1
> $ rv 3
> 3
> $ rv 5 16
> 14
> $ rv 5 16
> 5
> 
> 
> 
> ---------------------------------
> Yahoo! Mail - 6MB, anti-spam e antivírus gratuito. Crie sua conta agora!
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 


__________________________________
Do you Yahoo!?
Free Pop-Up Blocker - Get it now
http://companion.yahoo.com/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]