| |
VB.NET - Ein- und UmsteigerZufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: VB.NET2005 | Datum: 10.09.10 15:21 |
| Hallo zusammen!
Ich versuche gerade, eine Zufallszahl von 2 bis 12 zu generieren, mit gleicher Wahrscheinlichkeitenverteilung wie beim Würfeln mit zwei Würfeln.
Wahrscheinlichkeiten sind also:
2: 1/36
3: 2/36
4: 3/36
5: 4/36
6: 5/36
7: 6/36
8: 5/36
9: 4/36
10: 3/36
11: 2/36
12: 1/36
Bei Me.Load mache ich: Randomize Meine Funktion sieht so aus:
Public Function Zufallszahl() As Integer
Dim Wurf1 As Integer = 0
Dim Wurf2 As Integer = 0
Do Until Wurf1 > 0
Wurf1 = Rnd() * 6
Loop
Do Until Wurf2 > 0
Wurf2 = Rnd() * 6
Loop
Return Wurf1 + Wurf2
End Function Nun habe ich eine Millionen Mal Würfeln lassen, doch die Verteilung weicht über 10 % von der Normal Verteilung ab!
Was mache ich da falsch, oder liegt das am Computer?
Vielen Dank und Viele Grüße!
Beitrag wurde zuletzt am 10.09.10 um 15:21:41 editiert. | |
Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: VB.NET2005 | Datum: 10.09.10 18:36 |
| Hallo Dave,
vielen Dank für Deine Antwort!
Aber wie kann ich nun Zahlen mit einer bestimmten Wahrscheinlichkeit ausgeben lassen?
Mir fällt da Nichts ein, auch der Tipp "Zufallszahl mit bestimmter Wahrscheinlichkeit" hilft nicht.
Vielen Dank für Eure Antworten!
Beitrag wurde zuletzt am 10.09.10 um 18:48:54 editiert. | |
Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: GPM | Datum: 10.09.10 19:36 |
| Bei mir liegt die Abweichung mit der Net-Random-Klasse
und 1.000.000 Versuchen unter 1 %
MfG GPM 0 | |
Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: DaveS (Moderator) | Datum: 10.09.10 20:50 |
| Wie sieht dein Code aus? Ich bekomme Abweichungen bis zu 70% mit diesem Code, allerdings habe ich einiges getrunken und ich denke man kann sowieso leicht einen Fehler machen (Und wie wird eine Abweichung berechnet?)
Dim ev() As Integer = {1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1}
Dim throws(10) As Integer
For i = 1 To 1000000
throws(Zufallszahl() - 2) += 1
Next
For i = 0 To 10
Dim pc As Double = throws(i) / 10000
Dim ex As Double = ev(i) * 100 / 36
Dim pcd As Double = Math.Abs(pc - ex) * 100 / ex
Debug.WriteLine((i + 2).ToString() & ": " & pc.ToString() & " " & _
ex.ToString() & " " & pcd.ToString())
Next 2: 3,264 2,77777777777778 17,504
3: 6,6507 5,55555555555556 19,7126
4: 9,9157 8,33333333333333 18,9884
5: 13,1999 11,1111111111111 18,7991
6: 16,5594 13,8888888888889 19,22768
7: 16,5199 16,6666666666667 0,880600000000008
8: 13,2419 13,8888888888889 4,65832000000001
9: 9,8997 11,1111111111111 10,9027
10: 6,6308 8,33333333333333 20,4304
11: 3,2883 5,55555555555556 40,8106
12: 0,8297 2,77777777777778 70,1308 ________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist | |
Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: GPM | Datum: 10.09.10 21:26 |
| Mein Versuch:
Public Class Form1
Private WithEvents Btn As New Button With {.Text = "Start", .Parent = Me}
Private Sub Btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Btn.Click
Dim rnd As New Random
Dim werte() As Int32 = {0, 0, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1}
Dim zahlen(12) As Int32
For i As Int32 = 1 To 10 ^ 6
zahlen(rnd.Next(1, 7) + rnd.Next(1, 7)) += 1
Next
Dim soll, ist, diff As Int32
Dim s As String = "Zahl, Soll, Ist, Diff, Diff%" & Environment.NewLine
For i As Int32 = 2 To 12
soll = CInt(10 ^ 6 * werte(i) / 36)
ist = zahlen(i)
diff = Math.Abs(soll - ist)
s &= i & " = " & soll & ", " & ist & "-> " & diff
s &= ",-> " & diff * 100 / soll & " %" & Environment.NewLine
Next
MessageBox.Show(s)
End Sub
End Class MfG GPM 0 | |
Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: VB.NET2005 | Datum: 11.09.10 10:21 |
| Ich hab jetzt =Rnd() * 6 durch Zahl.Next(1,6) ersetzt. Deklaration von Zahl ist: Dim Zahl As New Random Nun sind die Abweichungen aber noch größer, und es kommt zwischendurch 0! | |
Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: DaveS (Moderator) | Datum: 11.09.10 11:53 |
| Wenn ich dafür eine Cryptofunktion für die Zufallszahlen nehme liegen die Ergebnisse viel näher an den theoretischen.
Private rng As New System.Security.Cryptography.RNGCryptoServiceProvider
Public Function Zufallszahl() As Integer
Return wurf() + wurf()
End Function
Dim bytes(1023) As Byte
Dim bi As Integer = 1024
Public Function wurf() As Integer
Dim b As Byte
If bi = bytes.Length Then
rng.GetBytes(bytes)
bi = 0
End If
b = bytes(bi)
bi += 1
Return (b Mod 6) + 1
End Function Ergebnis:
2 %Ergebnis: 2,8208 erwartet: 2,77777777777778 Abweichung: 1,54880000000001
3 %Ergebnis: 5,6695 erwartet: 5,55555555555556 Abweichung: 2,05100000000001
4 %Ergebnis: 8,4257 erwartet: 8,33333333333333 Abweichung: 1,1084
5 %Ergebnis: 11,3051 erwartet: 11,1111111111111 Abweichung: 1,7459
6 %Ergebnis: 13,9886 erwartet: 13,8888888888889 Abweichung: 0,717919999999997
7 %Ergebnis: 16,6595 erwartet: 16,6666666666667 Abweichung: 0,0429999999999993
8 %Ergebnis: 13,8871 erwartet: 13,8888888888889 Abweichung: 0,0128800000000012
9 %Ergebnis: 11,0135 erwartet: 11,1111111111111 Abweichung: 0,878499999999992
10 %Ergebnis: 8,2003 erwartet: 8,33333333333333 Abweichung: 1,5964
11 %Ergebnis: 5,3614 erwartet: 5,55555555555556 Abweichung: 3,4948
12 %Ergebnis: 2,6685 erwartet: 2,77777777777778 Abweichung: 3,934 ________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist | |
Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: VB.NET2005 | Datum: 11.09.10 12:04 |
| Vielen Dank GPM!
Mit Maximum 7 sind die Wahrscheinlichkeiten fast optimal!
(Maximale Abweichung 15.000, durchschnittliche Abweichung ca. 3.000, bei 3,6 Mio. Versuchen)
Viele Grüße! | |
Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: VB.NET2005 | Datum: 11.09.10 13:00 |
| Randomize kann ich jetzt auch weglassen, oder? | |
Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: GPM | Datum: 11.09.10 13:47 |
| Ja, wird nur bei Microsoft.VisualBasic.Rnd() benötigt.
MfG GPM 0 | |
Re: Zufallszahlen haben nicht gleiche Wahrscheinlichkeiten | | | Autor: VB.NET2005 | Datum: 11.09.10 13:58 |
| Ok, Danke! | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|