State-of-the-art random number generators

Κυριακή, 15 Μαΐου 2022 - 10:50 μ.μ.
- από τον χρήστη Χατζηδούκας Παναγιώτης

Η επιλογή της γεννήτριας (ψευδό-)τυχαιών αριθμών εξαρτάται κυρίως από τις ανάγκες της εφαρμογής, δηλαδή πόσους τυχαίους αριθμούς χρειάζεται συνολικά αλλά και πόσες ανεξάρτητες ακολουθίες είναι απαραίτητες (π.χ. όταν έχουν παράλληλους υπολογισμούς).
 
Μερικές από τις καλύτερες γεννήτριες είναι οι ακόλουθες: 
α) Mersenne-Twister, με μια αποδοτική υλοποίησή εδώ: http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/SFMT/#SFMT. Μάλιστα η γεννήτρια είναι διαθέσιμη στη C++: https://stackoverflow.com/questions/22923551/generating-number-0-1-using-mersenne-twister-c. Η συγκεκριμένη γεννήτρια καλύπτει τις ανάγκες των περισσότερων εφαρμογών αλλά δεν είναι κατάλληλη για κρυπτογραφία. 
β) Η καλύτερη γεννήτρια φαίνεται να είναι η ακόλουθη:  https://www.pcg-random.org/
Στην υλοποίηση της δεν υπάρχουν συναρτήσεις που να επιστρέφουν τυχαίους πραγματικούς αριθμούς.
Όμως τέτοιες συναρτήσεις υπάρχουν στην (α) και εφαρμόζουν την κατάλληλη διαίρεση του τυχαίου ακέραιου αριθμού για την μετατροπή του σε πραγματικό. Οι συγκεκριμένες συναρτήσεις μπορούν να εφαρμοστούν και στην υλοποίηση (β). 
 
Για την εργασία ακόμα και η drand48 (ή αντίστοιχα erand48) είναι αρκετή. Ο συνολικός αριθμός τυχαίων αριθμών που απαιτεί ο κώδικας της εργασίας είναι μικρότερος από την περίοδο της γεννήτριας.
 
Σχόλια (0)