![]() |
Re: BigInt: RandomRange Funktion?
@Meflin: Schaut ja eigentlich ganz gut aus, is aber glaube ich ein bisschen zu viel des Guten (ohne Blick auf die Source, kb aufs Reggen :D)
MfG Z4ppy |
Re: BigInt: RandomRange Funktion?
Es gibt eine schnellere (mit sehr kleiner Bias) und eine etwas langsamere Methode, die allerdings Gleichverteilung erzeugt. Der Einfachheit sollen bigints zwischen 0 und R-1 erzeigt werden. Wenn R n bits braucht, erzeugst Du ein bigint x mit n random bits.
Methode 1: random = x mod R (wie gesagt hier hast Du eine kleine Störung der Gleichverteilung, die allerdings umso kleiner ist, als R größer wird) Methode 2:
Code:
Als einfachen cryptografischen Generator kannst Du
repeat
x = n random bits until x<R; random = x; ![]() ![]() Gammatester |
Re: BigInt: RandomRange Funktion?
THX, allerdings muss ich zugeben, dass ich mit dieser Unit net ganz klarkomm :oops:
Was bedeutet denn dieses ctx in jeder Prozedur/Funktion? Wie generiert man dort nun eine Zufallszahl zwischen 1 und x? MfG Z4ppy €dit: Ich glaub, ich werd des random = x mod R machen, denn ich hab ohnehin riesige Primzahlen (1000 bis 20000 stellig :D) in meinem Programm ;) Von denen kann ich dann halt n R berechnen... Was sollte man denn als x nehmen? |
Re: BigInt: RandomRange Funktion?
Zitat:
Welche Funktionen Du verwenden kannst, hängt von den biginst ab. Wenn's ein array of cardinal ist, etwa isaac_read(ctx, @DeinArray, length(DeinArray)*sizeof(cardinal)). Zitat:
Gammatester |
Re: BigInt: RandomRange Funktion?
Danke für deine Erklärung, muss aber gleich weg, werds mir daher später ansehen...
Ich meinte: Was muss x sein ;) Eine beliebige, möglichst grosse Zahl? MfG Z4ppy |
Re: BigInt: RandomRange Funktion?
Nun nochmal: ich nehme random:=x mod R, R ist eine riesige Zahl - was muss x sein?
MfG Z4ppy |
Re: BigInt: RandomRange Funktion?
Zitat:
R ist eine riesige Zahl und Du sucht eine Zufallszahl z mit 0 <= z < R. Sei l = ceil(log2(R)) die Bitlänge von R. Die bessere Methode:
Code:
Mit der mod-Methode erzeugst Du l+k BITS, machst aus diesen BITS ein bigint x und setzt z := x mod R.
repeat
erzeuge l Zufalls-BITS mach aus den l BITS ein bigint x >=0 until x < R z := x; Je größer k ist, desto bessere Gleichverteilung erhältst Du. Also zB k=32: Abweichung von der Gleichverteilung ca 1 : 4 Milliarden. Gruß Gammatester |
Re: BigInt: RandomRange Funktion?
Und wie erzeugt man nun ein Zufallsbit? Und wie macht man daraus ein BigInt?!
MfG Z4ppy |
Re: BigInt: RandomRange Funktion?
Zitat:
![]() Wenn Du konkreten Code sehen willst, kannst Du ihn in meinem MPArith-Archiv (gleiche URL wie Beitrag #12) finden, ich werde mir jedenfalls keinen Code für die im Beitrag #1 genannte bigint-Klasse antun. Gruß Gammatester |
Re: BigInt: RandomRange Funktion?
Hmm, mir is grad noch ne ganz einfache methode eingefallen :D
Man generiert quasi einfach einen Zufallsstring aus Ziffern... Man muss die Zufallszahl natürlich in einer Variable zwischenspeichern, um sicher zu gehen, dass die Zahl mit Zufügen der Ziffer net grösser wird, als R... Am Schluss kann man den String ja dann einfach in nen BigInt umwandeln... Werde das morgen mal testen, müsste aber eigentlich funktionieren... MfG Z4ppy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz