Αναγν. άρθρου: 231847 - Τελευταία αναθεώρηση: Παρασκευή, 27 Μαΐου 2011 - Αναθεώρηση: 4.0

ΠΛΗΡΟΦΟΡΙΕΣ: Πώς Visual Basic δημιουργεί ψευδο-τυχαία αριθμούς για τη συνάρτηση RND

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

Περίληψη

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

Πλήρη treatise της στατιστικής φύσεως αυτός ο αλγόριθμος δεν εμπίπτει στην εμβέλεια αυτού του άρθρου, αλλά το θέμα εξετάζεται ευρέως σε επιστημονική βιβλιογραφία.

Περισσότερες πληροφορίες

Η Microsoft Visual Basic χρησιμοποιεί γραμμική congruential μέθοδος ψευδο-τυχαία αρίθμηση γενιάς στη συνάρτηση RND. Ο παρακάτω κώδικας ψευδο έγγραφα τον αλγόριθμο που χρησιμοποιείται:
   x1 = ( x0 * a + c ) MOD (2^24)
				
όπου:

x 1 = νέα τιμή
x 0 = προηγούμενη τιμή (μια αρχική τιμή 327680 χρησιμοποιείται από τη Visual Basic)
μια = 1140671485
c = 12820163

Ο τελεστής 'MOD' στον παραπάνω τύπο επιστρέφει το ακέραιο υπόλοιπο μετά από μια διαίρεση ακέραιου.

X1/(2^24) έκφραση θα επιστρέψει στη συνέχεια αριθμός κινητής υποδιαστολής μεταξύ 0,0 και 1,0 που επιστρέφεται από τη συνάρτηση RND.

Σημειώστε ότι ο αλγόριθμος παραπάνω δεν μπορεί να υλοποιηθεί σε κώδικα της Visual Basic με τον τρόπο που μπορούν να αναπαραχθούν τυχαία αριθμού ακολουθίας που δημιουργείται από τη συνάρτηση RND. Αυτό συμβαίνει επειδή εσωτερικά Visual Basic χρησιμοποιεί έναν τύπο δεδομένων long χωρίς υπογραφή που δεν υποστηρίζεται από τη γλώσσα Visual Basic.

Τον παρακάτω κώδικα C/C++ μπορεί να χρησιμοποιηθεί για να δημιουργήσει τις πρώτες δέκα ψευδο-τυχαία αριθμούς που δημιουργεί το Visual Basic:
#include "stdafx.h"

int main(int argc, char* argv[])
{
unsigned long       rndVal;

rndVal = 0x50000L;
int i;
float rndFloat;

for (i=0;i<10;i++)
	{
	rndVal = (rndVal * 0x43fd43fdL + 0xc39ec3L) & 0xffffffL;
	rndFloat = (float)rndVal / (float)16777216.0;
	printf("Value is %.15f\n",rndFloat);
	}
return 0;
}
				
Σημειώστε ότι, από προεπιλογή, η συνάρτηση Rnd() θα επιστρέψει η ίδια ακολουθία αριθμών ψευδο-τυχαία κάθε φορά που εκτελείτε το πρόγραμμα. Για ορισμένους σκοπούς (όπως στατιστικές μελέτες όπου απαιτείται επαναληψιμότητας) αυτό μπορεί να είναι κατάλληλο. Για άλλους τύπους εφαρμογών, όπως παιχνίδια, να μην είναι κατάλληλα. Εάν απαιτείται διαφορετική ακολουθία, χρησιμοποιήστε την πρόταση Randomize πριν από την πρώτη κλήση στο Rnd(). Αυτό θα προετοιμάσει τυχαίο αριθμό σπόρων χρησιμοποιώντας το χρονιστή του συστήματος. Εάν απαιτείται διαφορετική ακολουθία, αλλά πρέπει να είναι επαναλαμβανόμενη στο μέλλον, χρησιμοποιήστε τη σύνταξη Randomize X όπου x είναι κάποια συγκεκριμένη αριθμητική τιμή.

Είναι σημαντικό να αναγνωριστεί ότι Rnd() επιστρέφει νέα ακολουθία για κάθε στοιχείο που χρησιμοποιείται. δηλαδή, εάν το κύριο EXE δημιουργεί μία σειρά και χρησιμοποιεί μια βιβλιοθήκη DLL ActiveX Visual Basic για τη δημιουργία μιας ακολουθίας επίσης, τις αλληλουχίες αυτές είναι ανεξάρτητες από ένα άλλο.

Αναφορές

Για πρόσθετες πληροφορίες σχετικά με προηγούμενες εκδόσεις του Microsoft Basic δημιουργία ψευδο-τυχαία αριθμών, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
28150  (http://support.microsoft.com/kb/28150/EN-US/ ) RND και RANDOMIZE εναλλακτικές λύσεις για τη δημιουργία των τυχαίων αριθμών
Διάφορες αριθμητική αλγόριθμους για τη δημιουργία ψευδο-τυχαία ακολουθίες αριθμών μπορεί να βρεθεί στο Internet και στη δημοσιευμένη κείμενα περί αριθμητικών αλγορίθμων.

Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual Basic 1.0 Standard Edition
  • Microsoft Visual Basic 2.0 Standard Edition
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 2.0 Professional Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Λέξεις-κλειδιά: 
kbinfo kbmt KB231847 KbMtel
Μηχανικά μεταφρασμένοΜηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:231847  (http://support.microsoft.com/kb/231847/en-us/ )