O título resume tudo. Estou interessado em saber se existe um algoritmo capaz de produzir saída variável com entrada idêntica sem depender de outras fontes de aleatoriedade, como DateTime.Agora ou um número gerado a partir de um sensor de luz etc. Além disso, o algoritmo não pode ser executado em sequência, apenas duas execuções distintas e não relacionadas que produzem saídas diferentes.
10
2.0 + 2.0
esse sistema não daria resultados idênticos. Não precisa de outra fonte de aleatoriedade.Respostas:
Não, isso é fundamentalmente impossível, porque a própria definição de um algoritmo é que ele é bem definido e determinístico, ou seja, dado que a mesma entrada sempre produzirá a mesma saída. Existem algoritmos aleatórios, mas eles requerem aleatoriedade como entrada.
Além disso, o determinismo é o objetivo de design mais importante do hardware do computador. Uma CPU que não produz a mesma saída, dada a mesma entrada, seria totalmente inútil para a maioria dos propósitos.
fonte
Não, um algoritmo de geração de número pseudo-aleatório sempre produzirá a mesma saída, dada a mesma semente (portanto, pseudo- aleatório).
Acho interessante que você tenha usado o termo "algoritmo" em vez de "programa". Isso exclui uma certa classe de respostas yes (erros leves na RAM, intercalações de encadeamentos diferentes em um RNG com vários encadeamentos, etc.). Se você considerar que cada execução do seu algoritmo recebe a mesma entrada em cada iteração é bem especificada sem aleatoriedade, ela gerará a mesma saída em cada execução.
Dito isto, até coisas básicas como a temperatura da CPU são imprevisíveis o suficiente para agir como uma fonte de entropia, se forem normalizadas adequadamente. Portanto, não pense que isso implica que um gerador de números aleatórios "criptograficamente seguro" possa ser previsto se você souber a que horas ele foi executado; muitos deles usam alimentação de entropia gerada pelo sistema.
fonte
Você sabia que as pessoas trabalham duro para garantir que, dada a mesma semente, a mesma sequência de números aleatórios seja produzida sempre? Essa é uma propriedade desejável para coisas como a simulação de Monte Carlo, pois significa que os resultados são totalmente reprodutíveis. Se você não especificar a semente, algo como o tempo será usado, mas essa reprodutibilidade exata é realmente necessária.
Os únicos RNGs onde isso é realmente indesejável são aqueles usados para criptografia, e os que normalmente conseguem isso usam a fonte de números aleatórios do sistema operacional (que não é rebobinável em circunstâncias normais e que pode usar hardware sofisticado) para fornecer sua semente.
fonte
Suponho que, se você implementasse o algoritmo em diferentes plataformas de hardware e usasse técnicas como extrair os N bits do meio de um número inteiro, é possível obter respostas diferentes se a codificação do número inteiro fosse diferente (grande / pequeno / médio-final). Você também pode ter problemas executando em máquinas com FPUs em comparação com aqueles que não o fazem se estiver manipulando números de ponto flutuante. Provavelmente não é um problema em máquinas de classe desktop, mas pode ser um problema em telefones.
fonte