5.9 – Geração de números aleatórios aprende c + + criptocorrência market cap dezembro 2017

A capacidade de gerar números aleatórios pode moedas e tokens de criptomoedas ser útil em certos tipos de programas, particularmente em jogos, programas de modelagem estatística e simulações científicas que precisam modelar eventos aleatórios. Tome jogos por exemplo – sem eventos aleatórios, os monstros sempre atacariam você da mesma maneira, você sempre encontraria o mesmo tesouro, o layout do calabouço nunca mudaria, etc … e isso não seria um bom jogo.

Então, como nós geramos números aleatórios? Na vida real, geralmente geramos resultados aleatórios fazendo coisas como jogar uma moeda, jogar um dado ou embaralhar um baralho de cartas. Esses eventos envolvem muitas variáveis ​​físicas (por exemplo, Gravidade, atrito, resistência do ar, momentum, etc …) que se tornam quase impossíveis de prever ou controlar e produzem resultados que são, para todos os efeitos, aleatórios.


No entanto, os computadores não têm criptografia projetada em segurança de rede para aproveitar as variáveis ​​físicas: seu computador não pode jogar uma moeda, jogar um dado ou embaralhar cards reais. Os computadores vivem em um mundo elétrico controlado, onde tudo é binário (falso ou verdadeiro) e não há intermediários. Por sua própria natureza, os computadores são projetados para produzir resultados o mais previsíveis possível. Quando você diz ao computador para calcular 2 + 2, você sempre quer que a resposta seja 4. Não 3 ou 5 na ocasião.

Um gerador de números pseudo-aleatórios (PRNG cryptocoin pro srl) é um programa que recebe um número inicial (chamado semente) e executa operações matemáticas para transformá-lo em algum outro número que pareça não estar relacionado à semente. Em seguida, ele pega o número gerado e executa a mesma operação matemática para transformá-lo em um novo número que parece não estar relacionado ao número de onde foi gerado. Ao aplicar continuamente o algoritmo ao último número gerado, ele pode gerar uma série de novos números que parecerão aleatórios se o algoritmo for suficientemente complexo.

Se você executar a amostra std :: rand () como descriptografar a senha md5 no programa php acima várias vezes, você notará que ela imprime o mesmo resultado toda vez! Isso significa que enquanto cada número na sequência é aparentemente aleatório em relação aos anteriores, a sequência inteira não é aleatória de forma alguma! E isso significa que nosso programa acaba sendo totalmente previsível (as mesmas entradas levam às mesmas saídas todas as vezes). Há casos em que isso pode ser útil ou até mesmo desejado (por exemplo, você deseja que uma simulação científica seja repetível ou esteja tentando depurar o motivo de seu gerador de masmorras aleatório falhar).

Para tornar toda a nossa sequência aleatória, precisamos de uma forma de escolher uma semente que não seja um número fixo. A primeira resposta que provavelmente vem à mente é que precisamos de um número aleatório! Isso é um bom pensamento, mas se precisarmos de um número aleatório para gerar números aleatórios, então estamos em um catch-22. Acontece que realmente não precisamos que nossa semente seja um número aleatório – só precisamos escolher algo que mude toda vez que o programa for executado. Então podemos usar o nosso PRNG para gerar uma sequência única de números pseudo-aleatórios a partir do seed moto crypton yamaha 2016.

Por exemplo, digamos que você esteja tentando escrever um gerador de itens aleatórios para um jogo. Você escolherá um número aleatório entre 1 e 10 e, se o resultado for 10, o monstro descartará um item poderoso em vez de um item comum. Você esperaria uma chance em 10 de que isso acontecesse. Mas se o PRNG subjacente não for uniforme e gerar muito mais 10s do que deveria, seus jogadores acabarão recebendo itens mais raros do que você pretendia, possivelmente banalizando a dificuldade do seu jogo.

Terceiro, o PRNG deve ter uma boa distribuição dimensional de números. Isso significa que o boletim de marketing de criptografia deve retornar números baixos, números do meio e números altos aparentemente de forma aleatória. Um PRNG que retornou todos os números baixos, então, todos os números altos podem ser uniformes e não previsíveis, mas ainda levarão a resultados tendenciosos, especialmente se o número de números aleatórios que você realmente usa for pequeno.

Em quarto lugar, todos os prngs são periódicos, o que significa que, em algum momento, a sequência de números gerados acabará por se repetir. Como mencionado anteriormente, prngs são determinísticos, e dado um número de entrada, um PRNG produzirá o mesmo número de saída toda vez. Considere o que acontece quando um PRNG gera um número que gerou anteriormente uma pista de palavras cruzadas de criptograma. A partir desse ponto, começará a duplicar a sequência entre a primeira ocorrência desse número e a próxima ocorrência desse número repetidamente. O comprimento dessa seqüência é conhecido como o período.

O algoritmo usado para implementar std :: rand () pode variar de compilador para compilador, levando a resultados que podem não ser consistentes em compiladores. A maioria das implementações de rand () usa um método chamado de gerador congruente linear (LCG). Se você der uma olhada no primeiro exemplo desta lição, notará que, na verdade, trata-se de um LCG, embora um dos sintomas da meningite criptocócica tenha selecionado constantes ruins precárias. LCGs tendem a ter falhas que não são boas escolhas para a maioria dos problemas.

Uma das principais deficiências de rand () é que RAND_MAX é geralmente definido como 32767 (essencialmente 15 bits). Isso significa que, se você deseja gerar números em um intervalo maior (por exemplo, números inteiros de 32 bits), rand () não é adequado. Além disso, o rand cryptonomics capital gmbh () não é bom se você deseja gerar números aleatórios de ponto flutuante (por exemplo, entre 0.0 e 1.0), o que geralmente é útil ao fazer modelagem estatística. Finalmente, rand () tende a ter um período relativamente curto comparado a outros algoritmos.

Programas que usam números aleatórios podem ser difíceis de depurar porque o programa pode exibir diferentes comportamentos sempre que é executado. Às vezes pode funcionar e às vezes não. Ao depurar, é útil garantir que seu programa seja executado da mesma maneira (incorreta) a cada vez. Dessa forma, você pode executar o programa quantas vezes forem necessárias para isolar onde o erro está.

Por esta razão, a morfologia do cryptosporidium parvum, quando depuração, é uma técnica útil para definir a semente aleatória (via srand) para um valor específico (e.G. 0) que faz com que o comportamento errôneo ocorra. Isso garantirá que seu programa gere os mesmos resultados a cada vez, facilitando a depuração. Depois de encontrar o erro, você poderá usar o relógio do sistema novamente para começar a gerar resultados aleatórios novamente.