Tytuł podsumowuje. Chciałbym wiedzieć, czy istnieje algorytm zdolny do generowania zmiennych danych wyjściowych przy identycznych danych wejściowych bez polegania na innych źródłach losowości, takich jak DateTime.Now lub liczba wygenerowana z czujnika światła itp. Ponadto algorytmu nie można uruchomić po kolei tylko dwa odrębne, niepowiązane ze sobą przebiegi, które dają różne wyniki.
10
2.0 + 2.0
takiego systemu nie dałoby identycznych wyników. Nie potrzebuje innego źródła losowości.Odpowiedzi:
Nie, jest to zasadniczo niemożliwe, ponieważ sama definicja algorytmu polega na tym, że jest on dobrze zdefiniowany i deterministyczny, tzn. Przy takim samym wejściu zawsze będzie generował ten sam wynik. Istnieją algorytmy randomizowane, ale wymagają one losowości jako danych wejściowych.
Ponadto, determinizm jest Najważniejszym celem projektu sprzętu komputerowego. Procesor, który nie wytwarza tego samego wyjścia przy takim samym wejściu, byłby całkowicie bezużyteczny dla większości celów.
źródło
Nie, algorytm generowania liczb pseudolosowych zawsze będzie generował to samo wyjście przy tym samym ziarnie (stąd pseudolosowy ).
Interesujące jest dla mnie użycie terminu „algorytm” zamiast „program”. Wyklucza to pewną klasę odpowiedzi typu tak (miękkie błędy w pamięci RAM, różne przeplatanie wątków w wielowątkowym RNG itp.). Jeśli przyjmujesz za pewnik, że każde uruchomienie algorytmu pobiera takie same dane wejściowe przy każdej iteracji, jest dobrze określone bez losowości, wygeneruje to samo wyjście przy każdym uruchomieniu.
To powiedziawszy, nawet podstawowe rzeczy, takie jak temperatura procesora, są wystarczająco nieprzewidywalne, aby działać jako źródło entropii, jeśli są odpowiednio znormalizowane. Więc nie sądzę, że oznacza to, że można przewidzieć „bezpieczny kryptograficznie” generator liczb losowych, jeśli wiesz, o której godzinie został uruchomiony; wiele z nich korzysta z generowanego przez system feeda entropijnego.
źródło
Czy wiesz, że ludzie bardzo ciężko pracują, aby zapewnić, że przy tym samym nasieniu za każdym razem tworzona jest ta sama sekwencja liczb losowych? Jest to pożądana właściwość w przypadku symulacji Monte Carlo, ponieważ oznacza to, że wyniki są w pełni odtwarzalne. Jeśli nie określisz nasion, użyjesz czegoś takiego jak czas, ale taka dokładność jest naprawdę pożądana.
Jedynymi RNG, w których jest to naprawdę niepożądane, są te wykorzystywane w kryptografii, i te zwykle osiągają to, używając własnego źródła liczb losowych systemu operacyjnego (które nie jest możliwe do przewinięcia w normalnych okolicznościach i które może używać fantazyjnego sprzętu), aby zapewnić swoje źródło .
źródło
Podejrzewam, że jeśli zaimplementowałeś algorytm na różnych platformach sprzętowych i używał on technik takich jak pobieranie środkowych N bitów z liczby całkowitej, można by uzyskać różne odpowiedzi, gdyby kodowanie liczb całkowitych było inne (duża / mała / średnia). Możesz również mieć problemy z uruchomieniem na komputerach z układami FPU w porównaniu do tych, które nie występują, jeśli manipulujesz liczbami zmiennoprzecinkowymi. Prawdopodobnie nie jest to problem na komputerach klasy stacjonarnej, ale może być problem na telefonach.
źródło