Letzte Woche musste ich einen Test in VBA machen. Ich musste ein kleines "Spiel" programmieren. Das waren die Regeln:VBA Integer vs Long zum Zählen versucht an zu überprüfen, ob die Zufallszahl gleich der gewählten Zahl im Bereich von 1 bis 100 ist
- Wählen Sie eine Zahl zwischen 1 und 100 (1 und 100 enthalten)
- Anruffunktion Randomize
- Generieren einer Zufallszahl zwischen 1 und 100 (1 und 100 enthalten) ->
Int (100 * Rnd + 1)
- Überprüfen Sie, ob die Zufallszahl = gewählte Nummer ist.
- 5.1 Wenn dies zutrifft, fügen +1 entgegen zu wirken, Druckzähler, Spiel
5.2 Wenn false abgeschlossen ist, fügen Sie + 1 Zähler, gehen Sie zurück zu Schritt 3.
Ich hoffe, dass Sie das Ziel, erhalten von das Spiel".
Ich initialisierte den Zähler als Ganzzahl (16 Bit). Mein Lehrer sagte mir, dass es möglich ist, dass der Zähler überläuft. Er empfiehlt die Verwendung eines langen (32 Bit), so dass die Chance zum Überlauf kleiner ist.
Ich sagte ihm, dass es fast unmöglich ist, 32000 Versuche auf dem Zähler zu erreichen, weil die Chance, dass die gewählte Zahl gleich der generierten Nummer ist, 1: 100 ist.
Er antwortete: Aber es ist immer noch möglich.
Meine Frage:
Ist es möglich, dass der Zähler überlaufen könnte, wenn der Datentyp Integer ist? Wenn ja, wie ist die Chance? Wenn nein, wie kann ich es beweisen?
Warum ist diese Frage auf Stackoverflow und nicht auf Statistiken?
Es ist einfach. Weil Sie die Rnd-Funktion und VBA hinter den Kulissen kennen, die Jungs auf Statistiken nicht.
Die Zufallsfunktion können Sie die gleichen # 's zurück geben, es ist nicht wie 1 aus einer Tasche von 100 nehmen und verlassen 99. Wenn Sie ein Wörterbuch neben lief, können Sie die Einträge hinzufügen könnte und prüfen Sie dann ' IsTrueRandom (x als ganze Zahl) 'sei' dic.Exists (x) 'so etwas. Dies gibt Ihnen etwas in Übereinstimmung mit Ihrer Antwort, aber es wird langsam, wenn die verbleibenden Zahlen sinken. Ich denke, dein Lehrer sagt, du könntest # 35 100 mal, dann # 34 1000 mal, dann # 20 eine Million mal. –