Geração de números aleatórios

1
Eu tenho gerado números aleatórios em turbo C ++ (DOS) usando o comando aleatório.
Novamente, eu criei um número aleatório no ubuntu C ++ usando os comandos srand e rand.

Ambas as gerações aleatórias não estão combinando entre si (ou seja, ambas as gerações são diferentes para uma semente específica).

Por favor, deixe-me saber as razões por trás deste problema. É possível obter um código por trás dos comandos aleatórios, srand e rand?

    
por user287594 19.06.2014 / 08:04

1 resposta

2

Turbo C ++ e Gnu G ++ (C ++) (talvez LLVM / clang) têm bibliotecas diferentes. Suas implementações de rand , srand e muitas (muitas!) funções provavelmente serão diferentes em COMO elas fornecem o resultado adequado.

Todas as funções nessas bibliotecas produzirão os resultados esperados, open , read , exit e assim por diante. (Se não, eles não são muito 'em conformidade com os padrões').

Então, rand & amp; srand ARE está funcionando corretamente em cada ambiente ... eles fornecem (e geram) números aleatórios.

COMO eles chegam a esse resultado não está definido, existem vários métodos de criar números aleatórios (Veja 'Geração aleatória de números' para mais informações sobre o RNG)

Portanto, mesmo considerando o mesmo valor de semente, você não pode esperar que diferentes bibliotecas RNG forneçam saída idêntica. Isso será verdade independentemente de qual fonte de bibliotecas você usa, Microsoft, Solaris, Linux, * BSDs, OSX e assim por diante.

Somente se o método exato same for usado para derivar os números aleatórios, você pode esperar uma série idêntica. Diferenças na coleta de entropia podem diferir e criar perturbações ao longo do tempo. Eu imagino que alguém vai me corrigir sobre o 'tipo de', mas contanto que você esteja usando as mesmas bibliotecas, você deve obter os mesmos resultados das mesmas sementes. (mesmo mesmo!)

    
por lornix 20.06.2014 / 02:53