Τι είναι ψευδοτυχαία;

Οι ψευδοτυχαίοι αριθμοί παράγονται από υπολογιστές. Δεν είναι πραγματικά τυχαία, επειδή όταν ο υπολογιστής λειτουργεί σωστά, τίποτα που κάνει δεν είναι τυχαίο. Οι υπολογιστές είναι νοητικές συσκευές - η συμπεριφορά του υπολογιστή είναι απόλυτα προβλέψιμη, από την άποψη του σχεδιασμού. Έτσι, για να δημιουργήσουμε κάτι απρόβλεπτο, οι υπολογιστές χρησιμοποιούν μαθηματικούς αλγόριθμους για να παράγουν αριθμούς που είναι "αρκετά τυχαίοι".

Οι ψευδοτυχαίοι αριθμοί είναι απαραίτητοι για πολλές εφαρμογές υπολογιστών, όπως παιχνίδια και ασφάλεια. Στα παιχνίδια, οι τυχαίοι αριθμοί παρέχουν απρόβλεπτα στοιχεία που μπορεί να ανταποκριθεί ο παίκτης, όπως αποφεύγοντας τυχαία σφαίρα ή τραβώντας μια κάρτα από την κορυφή ενός καταστρώματος.

Στην ασφάλεια των υπολογιστών, η ψευδοτυχαία είναι σημαντική στους αλγόριθμους κρυπτογράφησης, οι οποίοι δημιουργούν κώδικες που δεν πρέπει να προβλεφθούν ή να μαντέψουν.

Τι είναι το PRNG;

Μια ψευδοτυχαία γεννήτρια αριθμών, ή PRNG, είναι οποιοδήποτε πρόγραμμα ή λειτουργία που χρησιμοποιεί μαθηματικά για να προσομοιώνει την τυχαιότητα. Μπορεί επίσης να ονομάζεται DRNG (ψηφιακή γεννήτρια τυχαίων αριθμών) ή DRBG (ντετερμινιστική γεννήτρια τυχαίων δυαδικών ψηφίων).

Το μαθηματικό μπορεί μερικές φορές να είναι περίπλοκο, αλλά γενικά, χρησιμοποιώντας ένα PRNG απαιτεί μόνο δύο βήματα:

  1. Παρέχετε το PRNG με αυθαίρετο σπόρο.
  2. Ζητήστε τον επόμενο τυχαίο αριθμό.

Η τιμή του σπόρου είναι ένα "σημείο εκκίνησης" για τη δημιουργία τυχαίων αριθμών. Η τιμή χρησιμοποιείται κατά τον υπολογισμό των αριθμών. Αν η τιμή του σπόρου αλλάξει, οι αριθμοί που δημιουργούνται επίσης αλλάζουν και μια μόνο τιμή σπόρου θα παράγει πάντα τους ίδιους αριθμούς. Για το λόγο αυτό, οι αριθμοί δεν είναι πραγματικά τυχαίοι, διότι η αληθινή τυχαία δεν θα μπορούσε ποτέ να ξαναδημιουργηθεί.

Η τρέχουσα ώρα χρησιμοποιείται συχνά ως μοναδική τιμή σπόρου. Για παράδειγμα, αν είναι 5 Μαρτίου 2018, στις 5:03 μ.μ. και 7, 01324 δευτερόλεπτα UTC, αυτό μπορεί να εκφραστεί ως ακέραιος αριθμός. Αυτός ο ακριβής χρόνος δεν θα συμβεί ποτέ ξανά, οπότε ένα PRNG με αυτόν τον σπόρο θα πρέπει να παράγει ένα μοναδικό σύνολο τυχαίων αριθμών.

Σημείωση: Η δυνατότητα αναπαραγωγής μιας τυχαία δημιουργηθείσας ακολουθίας μπορεί να είναι χρήσιμη. Σε ακαδημαϊκές εφαρμογές, μπορεί να δημιουργηθεί μια τεράστια ακολουθία τυχαίων τιμών για μια προσομοίωση, και στη συνέχεια να αναπαράγεται ακριβώς για λεπτομερέστερη ανάλυση αργότερα. Ως ένα άλλο παράδειγμα, στα παιχνίδια υπολογιστών, εάν ένας παίκτης φορτώνει ένα αποθηκευμένο παιχνίδι, τυχόν "τυχαία" γεγονότα μπορεί να είναι τα ίδια όπως εάν το παιχνίδι δεν σταμάτησε ποτέ. Με αυτόν τον τρόπο, ο παίκτης δεν μπορεί να επαναφορτίσει το ίδιο παιχνίδι επανειλημμένα για να προσπαθήσει για καλύτερη τύχη.

Πώς να δημιουργήσετε ψευδοτυχαίο αριθμό

Τα παρακάτω είναι μερικοί τρόποι με τους οποίους μπορείτε να δημιουργήσετε ψευδοτυχαίο αριθμό σε κοινά προγράμματα και γλώσσες προγραμματισμού.

Γραμμή εντολών των Windows

Στη γραμμή εντολών των Windows ή σε ένα αρχείο δέσμης, η ειδική μεταβλητή περιβάλλοντος % RANDOM% παράγει έναν ψευδοτυχαίο αριθμό μεταξύ 0 και 32767, τοποθετημένο με τη στιγμή που ξεκίνησε η γραμμή εντολών.

 echo "Έτσι% RANDOM%!" 
 "27525!" 

Για να δημιουργήσετε ένα αρχείο δέσμης που παράγει έναν τυχαίο αριθμό μεταξύ 1 και 100:

 αντί αντί για sorandom.bat echo off set / a myrand =% RANDOM% * 100/32768 + 1 echo Ο αριθμός που σκέφτηκα ήταν% myrand%. Το πήρατε σωστά; 

Πατήστε Ctrl + Z και Enter για να αποθηκεύσετε το αρχείο δέσμης. Στη συνέχεια, εκτελέστε το αρχείο:

 sorandom 
 Ο αριθμός που σκέφτηκα ήταν 91. Το πήρατε σωστά; 

Windows PowerShell

Το cmdlet Get-Random παράγει έναν τυχαίο αριθμό μεταξύ 0 και 2.147.483.647 (τη μέγιστη τιμή ενός ακέραιου 32-bit που δεν έχει υπογραφεί).

 Get-Random 
 1333190525 

Το cmdlet λαμβάνει διάφορες επιλογές, όπως η ελάχιστη και η μέγιστη τιμή. Οι τιμές στρογγυλοποιούνται προς τα κάτω, έτσι ώστε να δημιουργηθεί ένας αριθμός μεταξύ 1 και 100, ορίστε το μέγιστο σε 101:

 Get-Τυχαία-Μίνιμουμ 1-Μέγιστη 101 
 99 

Microsoft Excel

Σε ένα υπολογιστικό φύλλο Excel, ο τύπος = RAND () θα δημιουργήσει έναν τυχαίο αριθμό μεταξύ 0 και 1. Για παράδειγμα, εάν επισημάνετε ένα κελί και πληκτρολογήσετε = RAND (), το κελί θα περιέχει έναν αριθμό που θα αλλάξει όποτε το φύλλο επανέρχεται -πολογίστηκε.

Αυτή η μέθοδος λειτουργεί επίσης σε άλλες εφαρμογές υπολογιστικών φύλλων, όπως το LibreOffice Calc και το Google Sheets.

Στις γλώσσες προγραμματισμού

Οι περισσότερες γλώσσες προγραμματισμού έχουν τις δικές τους λειτουργίες PRNG. Ακολουθούν ορισμένα συνηθισμένα παραδείγματα:

ντο

Στη γλώσσα προγραμματισμού C, οι λειτουργίες PRNG ορίζονται στην τυπική βιβλιοθήκη, stdlib . Ο συνήθης τρόπος σποράς της τυχαίας γεννήτριας είναι με τη συνάρτηση time (), που δηλώνεται σε time.h. Ο παραγόμενος αριθμός πέφτει μεταξύ 0 και του σταθερού RAND_MAX, ενός ακέραιου για το σύστημα ακέραιου αριθμού που εγγυάται ότι είναι τουλάχιστον 32767.

 #include #include #include void main () {srand (χρόνος (NULL)); / * σπόρος η γεννήτρια * / int rand1 = rand (); / * ένας ψευδοτυχαίος ακέραιος μεταξύ 0 και RAND_MAX * / printf ("Τυχαίος αριθμός μεταξύ 0 και% d:% d \ n", RAND_MAX, (int) rand1). / * Ή, εντός μιας συγκεκριμένης περιοχής: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int κύκλος = (int) rand2; printf ("Τυχαίος αριθμός μεταξύ% d και% d:% d (% f) \ n", min, max, round, rand2)? ΕΠΙΣΤΡΟΦΗ; }} 

Παραγωγή:

 Τυχαίος αριθμός μεταξύ 0 και 2147483647: 1789080047 Τυχαίος αριθμός μεταξύ 0 και 100: 74 (74.369179) 

C ++

Στην C ++:

 #include #include #include int main () {srand (χρόνος (NULL)); std :: cout << "Τυχαίο αριθμό μεταξύ 0 και" << RAND_MAX << ":" << rand () << "\ n" << "Τυχαίο νούμερο μεταξύ 1 και 100:" << (rand () 100) + 1 << std :: endl; επιστροφή 0? }} 

Παραγωγή:

 Τυχαίος αριθμός μεταξύ 0 και 2147483647: 126569208 Τυχαίος αριθμός μεταξύ 1 και 100: 9 

Python 3

Η τυχαία ενότητα της Python προσφέρει μια ποικιλία λειτουργιών για τη δημιουργία τυχαίων αριθμών. Σε αυτό το παράδειγμα, χρησιμοποιούμε τρεις διαφορετικές μεθόδους για την εύρεση ενός τυχαίου ακέραιου αριθμού σε ένα εύρος.

 Εισαγωγή τυχαία από datetime ημερομηνία εισαγωγής random.seed (datetime.now ()) print ("Τυχαίο αριθμό στην περιοχή [0, 1):", random.random ()) # Μέσα σε ένα εύρος. Όλα αυτά κάνουν το ίδιο πράγμα: εκτύπωση ("Τυχαίος αριθμός μεταξύ 1 και 100:", στρογγυλός (random.random () * 100) + 1) 101)) ("Τυχαίο νούμερο μεταξύ 1 και 100:", random.randint (1, 100)) 

Παραγωγή:

 Τυχαίο νούμερο στην περιοχή [0, 1): 0.05137418896158319 Τυχαίο αριθμ μεταξύ 1 και 100: 27 Τυχαίος αριθμός μεταξύ 1 και 100: 80 Τυχαίος αριθμός μεταξύ 1 και 100: 80 

Perl 5

Στο Perl:

 srand (χρόνος); # αλλαγές μία φορά ανά δευτερόλεπτο εκτύπωση "Τυχαίο αριθμό στην περιοχή [0, 1):", rand (), "\ n"; εκτύπωση "Τυχαίος αριθμός στην περιοχή [1, 100]:", int (rand (101)), "\ n"; 

Παραγωγή:

 Τυχαίος αριθμός στην περιοχή [0, 1): 0.691379946963028 Τυχαίος αριθμός στην περιοχή [0, 100]: 82 

JavaScript

 console.log ("Τυχαίος αριθμός στην περιοχή [0, 1):" + Math.random ()); console.log ("Τυχαίο αριθμό στην περιοχή [1.100]:" + Math.floor (Math.random () * 101)); 

Δείτε την έξοδο στην κονσόλα JavaScript του προγράμματος περιήγησης του ιστού (για παράδειγμα, στον Firefox πατήστε Ctrl + Shift + K ):

 Τυχαίος αριθμός στην περιοχή [0, 1): 0.305008216755414 Τυχαίος αριθμός στην περιοχή [1.100]: 8 

Σημείωση: Δεν είναι δυνατή η σπορά της λειτουργίας Math.random () στη JavaScript. Εάν χρειάζεστε ένα εύρωστο PRNG στο JavaScript, ελέγξτε τους καλύτερους τυχαίους αριθμούς για το JavaScript στο GitHub.

Παράδειγμα PRNG: Γραφικό στοιχείο JavaScript

Χρησιμοποιώντας το παρακάτω γραφικό στοιχείο, μπορείτε να δημιουργήσετε ένα PRNG και να το χρησιμοποιήσετε για να δημιουργήσετε τυχαίους αριθμούς.

Κάθε φορά που παράγετε έναν τυχαίο αριθμό από τον δεδομένο σπόρο σας, η μετατόπισή του αυξάνεται κατά 1. Ο πρώτος αριθμός που παράγεται από τους σπόρους έχει μετατοπιστεί μηδέν, ο δεύτερος έχει μετατοπιστεί 1 κλπ. Η γεννήτρια παράγει πάντα τον ίδιο αριθμό για δεδομένο σπόρο και μετατόπιση .

Εισάγετε οτιδήποτε θέλετε στο πεδίο για να δημιουργήσετε ένα μοναδικό σπόρο.

Χρησιμοποιήστε το κουμπί Δημιουργία για να πάρετε τον επόμενο τυχαίο αριθμό χρησιμοποιώντας αυτόν τον σπόρο και αυξήστε την μετατόπιση.

Χρησιμοποιήστε το κουμπί Επαναφορά για να επαναφέρετε την μετατόπιση στο μηδέν.

αριθμός που παράγεται από σπόρους :

Επαναφορά αντιστάθμισης σπόρου (προς το παρόν 0 )

Αυτό το γραφικό στοιχείο χρησιμοποιεί τα σενάρια PRNG του ανοικτού κώδικα Johannes Baagøe, Alea.js και Mash.js.

Ασφάλεια υπολογιστών, προγραμματισμός, όροι λογισμικού