Eu suspeito que a resposta seja ' Por causa da matemática ', mas eu esperava que alguém pudesse dar um pouco mais de percepção em um nível básico ...
Eu estava bisbilhotando o código-fonte BCL hoje, observando como algumas das classes que eu usei antes foram realmente implementadas. Eu nunca tinha pensado em como gerar números aleatórios (pseudo) antes, então decidi ver como isso era feito.
Fonte completa aqui: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
Esse valor MSEED é usado toda vez que uma classe Random () é propagada.
De qualquer forma, eu vi esse 'número mágico' - 161803398 - e não tenho a menor idéia do por que esse número foi selecionado. Não é um número primo ou uma potência de 2. Não é "meio caminho" para um número que parecia mais significativo. Eu olhei para ele em binário e hexadecimal e bem, parecia apenas um número para mim.
Tentei procurar o número no Google, mas não encontrei nada.
The current implementation of the Random class is based on Donald E. Knuth's subtractive random number generator algorithm. For more information, see D. E. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, second edition, 1981.
inextp = 31;
, mas o código-fonte daRandom
classe o exibe como seinextp = 21;
alguém tivesse digitado errado, causando esse bug .Respostas:
Não, mas é baseado em Phi (a "proporção áurea").
Mais sobre a proporção áurea aqui .
E uma muito boa leitura para o matemático ocasional aqui .
E eu encontrei um trabalho de pesquisa sobre geradores de números aleatórios que concorda com essa afirmação. (Veja a página 53.)
fonte
"One can’t even fathom the repercussions if security flaws in the implementation (or design) of the SSL protocol are to be found."
(página 4) #Este número é obtido a partir da proporção áurea 1,61803398 * 10 ^ 8 . Matt deu uma boa resposta sobre qual é esse número, portanto, explicarei um pouco sobre um algoritmo.
Este não é um número especial para este algoritmo. O algoritmo é o algoritmo gerador de número aleatório subtrativo de Knuth e os principais pontos são:
O gerador é baseado na seguinte recursão: X n = (X n-55 - X n-24 ) mod m, onde n ≥ 0. Este é um caso parcial de gerador de Fibonacci atrasado : X n = (X n-j @ X n-k ) mod m, onde 0 <k <j e @ é qualquer operação binária (subtração, adição, xor).
Existem várias implementações deste gerador. Knuth oferece uma implementação em FORTRAN em seu livro. Encontrei o seguinte código , com o seguinte comentário:
Um pouco mais pode ser encontrado aqui Observe que, na verdade, este não é um trabalho de pesquisa (como afirmado em Matemática), mas apenas uma tese de mestrado.
As pessoas em criptografia como para utilizar um número irracional (
pi
,e
,sqrt(5)
), porque existe uma conjectura que algarismos de tais números aparece com a mesma frequência e, portanto, têm elevada entropia . Você pode encontrar esta pergunta relacionada na troca de pilha de segurança para saber mais sobre esses números. Aqui está uma citação:fonte