| |
|
|
Jörg Sellmeyer | Gibt es eine Möglichkeit eine Zufallszahl aus einem Bereich jenseits der Longgrenze zu ermitteln.
Wenn ich Var n! = 4^16 Print Rnd(n!) verwende, kommt nur 0 raus. Gibts da was per Api oder so? Gruß Jörg |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.12.2007 ▲ |
|
|
|
|
| |
|
| |
|
|
|
Jörg Sellmeyer | Ja das hab ich schon, aber die Zahlen dürfen nicht höher als 4^16 sein. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.12.2007 ▲ |
|
|
|
|
Jörg Sellmeyer | Seltsam - warum taucht denn Franks Beitrag nur hier auf: [...]
Die Lösungen haben leider alle den Nachteil, daß sie keine 4^16 zu 1 Wahrscheinlichkeit abbilden, sondern irgendwelche kombinatorischen. Z. B. ist bei einem echten Rnd() mit großen Zahlen die Wahrscheinlichkeit 1:1, daß die Zahl größer oder kleiner ist, als 4^16 : 2. In iFs Beispiel ist die Wahrscheinlichkeit aber schon 10:1, daß die Zahl 10-stellig ist (4^16 ist übrigens 10- und nicht 12-stellig). Ähnliches gilt für Franks (verschwundenes) Beispiel. Hat jemand ne Idee, wie ich das angehen könnte? Oder könnte das sogar in Profan eingebaut werden? Ist wahrscheinlich ne fest verdrahtete Delphilösung, oder? |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 11.12.2007 ▲ |
|
|
|
|
Michael Wodrich | Selbst stricken - Beispiel KompilierenMarkierenSeparierenDeclare Zufall_Save!, Zufall_Obergrenze!
Proc Zufall
Declare x1!,x2!
x1! = (Zufall_Save! * 65539)
x2! = Round((x1! / Zufall_Obergrenze! - 0.5),0) * Zufall_Obergrenze!
Zufall_Save! = x1! - x2!
Return Zufall_Save!
EndProc
Declare x!
Zufall_Obergrenze! = (4.0^16) - 1
Zufall_Save! = 7
repeat
cls
print obergrenze.:, format$(#,0,Zufall_Obergrenze!), WaitKey: 13 = Enter = weiter, sonst Ende
print save.......:, format$(#,0,Zufall_Save!)
print
print die Zufallszahl;tab(45);Kontrollwert (Max - Zufall)
whileloop 20
x! = zufall()
print x=,format$(#,0,Round(x!-0.5,0));tab(45);format$(#,0,Round(Zufall_Obergrenze! - x! - 0.5,0))
endwhile
waitkey
until %key <> 13
end
Über die Verteilung kann ich aber nichts sagen - bin kein Mathematiker
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 11.12.2007 ▲ |
|
|
|
|
Frank Abbing |
Seltsam - warum taucht denn Franks Beitrag nur hier auf:
Vielleicht weil ich mein Posting wieder gelöscht hatte? Ich fand die Methode später schlecht, weil der Umweg über einen Bereich ja gar nicht nötig ist ist. |
|
|
| |
|
|
|
RGH | Jörg Sellmeyer
Gibt es eine Möglichkeit eine Zufallszahl aus einem Bereich jenseits der Longgrenze zu ermitteln.
Wenn ich Var n! = 4^16 Print Rnd(n!) verwende, kommt nur 0 raus. Gibts da was per Api oder so? Gruß Jörg
Warum nimmst Du nicht einfach zufall! = rnd(4^8) * rnd(4^8)? Das Ergebnis ist immer >= 0 und < 4^16.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 11.12.2007 ▲ |
|
|
|
|
RGH | |
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 11.12.2007 ▲ |
|
|
|
|
RGH | ... und ab der nächsten XProfan-Version gibt es auch den Sonderfall Rnd(), der bislang nicht möglich war. Das Ergebnis ist dann ein Flloatwert >= 0 und < 1. Dann löst Du Dein Problem einfach mit: KompilierenMarkierenSeparieren Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 11.12.2007 ▲ |
|
|
|
|
Jörg Sellmeyer | Sehr schön! Alle kombinierten Werte sind nämlich irgendwie gemauschelt und entsprechen nicht der tatsächlichen Wahrscheinlichkeit. Läßt sich hier sehr leicht nachvollziehen: KompilierenMarkierenSeparieren $H Windows.ph
Set(Decimals,0)
Window 300,10 - 800,1010
Cls
SetDialogFont ~GetStockobject($11)
Declare z!,l&,l1&,l2&,z$,i%,i1%,i2%
l&= Create(ListBox,%hwnd,1,10,10,180,Height(%hwnd)-20)
l1&= Create(ListBox,%hwnd,1,212,10,180,Height(%hwnd)-20)
l2&= Create(ListBox,%hwnd,1,414,10,180,Height(%hwnd)-20)
WhileLoop 20670
Randomize
z$=Format$(0000000000,Rnd($7fffffff) + Rnd($7fffffff))
If Left$(z$,2)= 00
Inc i%
EndIf
Case SelectString(l&,-1,z$) = -1:AddString(l&, z$)
z$=Format$(00000,Rnd(256^2))
If Left$(z$,2)= 00
Inc i1%
EndIf
Case SelectString(l1&,-1,z$) = -1:AddString(l1&, z$) + + Format$(0000000000,Rnd(256^2))
z$=Format$(00000,(Rnd(256)+1) * Rnd(256))
If Left$(z$,2)= 00
Inc i2%
EndIf
Case SelectString(l2&,-1,z$) = -1:AddString(l2&, z$) + + Format$(0000000000,Rnd(256^2))
WindowTitle Str$(i%) + + Str$(i1%) + + Str$(i2%) + + Str$(&Loop)
Wend
waitkey
|
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 11.12.2007 ▲ |
|
|
|
|
| RGH
... und ab der nächsten XProfan-Version gibt es auch den Sonderfall Rnd(), der bislang nicht möglich war. Das Ergebnis ist dann ein Flloatwert >= 0 und < 1. Dann löst Du Dein Problem einfach mit: KompilierenMarkierenSeparierenGruß Roland
Jau das ist super!
@Jörg: Du greifst damit auf einen vergänglichen BeitragsCache zu, Frank hatte seinen Beitrag gelöscht. |
|
|
| |
|
|
|
Jörg Sellmeyer | Diese neue Möglichkeit ist in der Hilfe gar nicht erwähnt! |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 07.08.2008 ▲ |
|
|
|