![]() |
BigInt: RandomRange Funktion?
Ich hab mir
![]() MfG Z4ppy |
Re: BigInt: RandomRange Funktion?
*push*
MfG Z4ppy |
Re: BigInt: RandomRange Funktion?
Hallo.
In der Math.pas ist RandomRange definiert mit:
Delphi-Quellcode:
Du brauchst also ein Random(), das mit BigInt funktioniert.
function RandomRange(const AFrom, ATo: Integer): Integer;
begin if AFrom > ATo then Result := Random(AFrom - ATo) + ATo else Result := Random(ATo - AFrom) + AFrom; end; Leider enthält die BigInt.pas keine Random-Routine. Eine ![]() ![]() Wenn du auf BigNum2 umsteigst, müsstest du eine Random()-Routine dabei haben. Wenn es unbedingt BigInt sein muss, könntest du irgendwie das normale "Random(): Integer" so oft kopieren, sodass der BigInteger möglichst voll ausgenutzt wird. Das halte ich aber für etwas umständlich und unprofessionell. Folgender Code (der im Moment nicht funktioniert) als Denkanstoß:
Delphi-Quellcode:
Dann müsstest du eben schauen, wie oft der Integer maximal in den BigInteger "reinpasst" (unter der Annahme, dass Random() stets den höchste Integer-Wert annimmt). Ich würde das mit einer For-Schleife, wie oben gezeigt, machen.
function BigRandom(): TBigInt;
var i: integer; bg: TBigInt; begin bg := TBigInt.Create; for i := 1 to (High(bg) div High(Integer)) do begin bg.Add(Random(High(Integer)); end; result := bg; end; Gruß blackdrake |
Re: BigInt: RandomRange Funktion?
Dummerweise sind die Zufallszahlen, die du mit der zweiten Methode erhältst, nicht gleich- sondern (annährend) normalverteilt.
|
Re: BigInt: RandomRange Funktion?
Zitat:
![]() // Edit: Mein oben genannter Code ohne obere Grenze kann gar nicht funktionieren, da TBigInt theoretisch unendlich große Werte verwalten kann, also High(BigInteger) = unendlich. Gruß blackdrake |
Re: BigInt: RandomRange Funktion?
Dummerweise arbeite ich mit Verschlüsselungen :D
Zum verlinkten Thema: Leider scheint in dieser Unit auch keine Random-Funktion enthalten zu sein :( Gibts denn irgendwie "bessere" Random-Funktionen als die der Math-Unit? MfG Z4ppy |
Re: BigInt: RandomRange Funktion?
Zitat:
![]() |
Re: BigInt: RandomRange Funktion?
Die Windows-Crypto-API bietet die Funktion CryptGenRandom. Wenn du dir damit eine gewisse Anzahl zufälliger Bytes holst, hast du eine gleichverteilte Zufallszahl. Der einzige Nachteil ist, dass der Umfang deines Zahlenraums von der Form 2^n sein muss.
|
Re: BigInt: RandomRange Funktion?
Das macht doch nix - aus den Bytes erstellt man eine BigInt-Instanz und nimmt Min(candidate, max) ;)
|
Re: BigInt: RandomRange Funktion?
Das hat dann aber wirklich nichts mehr mit Gleichverteilung zu tun.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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