alguem pode me explicar o que significa a "semente" da função rand() linguagem c

1. alguem pode me explicar o que significa a "semente" da função rand() linguagem c

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/08/2016 - 15:54h

e tbm a função srand(time(null)) como ela usa o tempo do sistema para gerar sementes


  


2. Re: alguem pode me explicar o que significa a "semente" da função rand() linguagem c

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/08/2016 - 16:08h

Como disse John von Neumann não dá para gerar números aleatórios com fórmulas matemáticas.

Acontece que temos pseudo-aleatoriedade.

São fórmulas matemáticas que criam sequências de números.

E se são fórmulas então podem ser previstas.

Existem métodos para testar estes números e saber o quento se aproximam de aleatórios.

A semente serve para alimentar o tal sequenciador, de modo que sementes diferentes geram sequências diferentes.

A função de tempo é para o mesmo.

Ela retorna um valor correspondente ao instante de tempo, que muda a toda hora, e alimenta o sequenciador.

Deste modo dá uma sensação de imprevisibilidade maior, mas não existe 100% aleatória usando estes métodos.

Lembrando que existem outros métodos e algoritmos para tal.

Um que se tentou usar foi o Rho de John Pollard.

Mas na verdade ele serve mesmo é para fatorar números.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: alguem pode me explicar o que significa a "semente" da função rand() linguagem c

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/08/2016 - 16:12h

listeiro_037 escreveu:

Como disse John von Neumann não dá para gerar números aleatórios com fórmulas matemáticas.

Acontece que temos pseudo-aleatoriedade.

São fórmulas matemáticas que criam sequências de números.

E se são fórmulas então podem ser previstas.

Existem métodos para testar estes números e saber o quento se aproximam de aleatórios.

A semente serve para alimentar o tal sequenciador, de modo que sementes diferentes geram sequências diferentes.

A função de tempo é para o mesmo.

Ela retorna um valor correspondente ao instante de tempo, que muda a toda hora, e alimenta o sequenciador.

Deste modo dá uma sensação de imprevisibilidade maior, mas não existe 100% aleatória usando estes métodos.

Lembrando que existem outros métodos e algoritmos para tal.

Um que se tentou usar foi o Rho de John Pollard.

Mas na verdade ele serve mesmo é para fatorar números.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

mas para que precisamente é usado essa semente??



4. Re: alguem pode me explicar o que significa a "semente" da função rand() linguagem c

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/08/2016 - 16:26h

Dá uma lida nestes textos:

* https://pt.wikipedia.org/wiki/Pseudoaleatoriedade#Criptografia
*http://www.uff.br/cdme/arquivos/volchan-2002.pdf

A semente serve para alimentar uma fórmula que cria números. Você precisaria ver um algoritmo para saber onde a semente se encaixa na fórmula.


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



5. Re: alguem pode me explicar o que significa a

Paulo
paulo1205

(usa Ubuntu)

Enviado em 23/08/2016 - 20:39h

O tipo mais simples de fórmula para geração de número pseudo-aleatórios tem o seguinte aspecto.

x=x*A+B; 


Ou seja, o próximo estado do gerador de número pseudo-aleatórios (PRNG) é uma função depende do estado atual.

“Semente” pode ser entendido como sinônimo do estado atual, mas geralmente se aplica esse nome apenas ao valor que você deliberadamente e manualmente define no estado do PRNG, que vai afetar os valores gerados posteriormente.

Nos PRNGs mais simples, a fórmula acima é exatamente o que se costuma usar. Os coeficientes A e B são números geralmente constantes e supostamente escolhidos a dedo para não provocar uma repetição muito frequente dos valores produzidos pela fórmula.

Para você ter uma ideia de como a coisa pode ser perigosamente simples, eis o PRNG usado no UNIX tradicional e em diversas implementações de várias plataformas, que já foi usado no Linux e que ainda é usado em alguns BSDs até hoje (embora a manpage recomende explicitamente não o usar, preferindo random() -- fonte: http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdlib/rand.c?rev=1.12&content-type=text/x-cvsw...).

static u_long next = 1;  // <-- Esse aqui é o estado atual.  O valor 1 é a semente default (se você omitir srand() no seu programa).

int rand(void){
return (int)((next = next * 1103515245 + 12345) % ((u_long)RAND_MAX + 1));
}

void srand(u_int seed){
next = seed;
}


Como você pode ver, srand() apenas muda o valor atual da semente. E a fórmula do PRNG se revela uma porcaria, no fim das contas. Só para dar uma ideia da primariedade, a primeira coisa que qualquer pessoa pode ver é que os sucessivos números sorteados produzirão inexoravelmente usa sequência alternada de números pares e ímpares.

Felizmente, no Linux, hoje em dia, rand() foi transformada num sinônimo de random() (e srand() em sinônimo de srandom()).

A implementação de random()/srandom() também possui a figura da semente, mas em lugar de usar apenas um valor inteiro como estado para a geração de novos números, usa-se um vetor com vários elementos, e alguns desses elementos são combinados entre si, e depois modificados, a cada chamada feita a random(). srandom(), por sua vez, coloca o valor da semente como um dos elementos do vetor, e depois chama random() um número arbitrário de vezes, a fim de propagar os efeitos da nova semente pelos demais elementos do vetor.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts