AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BigInt: RandomRange Funktion?

Offene Frage von "Z4ppy"
Ein Thema von Z4ppy · begonnen am 31. Aug 2008 · letzter Beitrag vom 3. Sep 2008
Antwort Antwort
Seite 1 von 3  1 23      
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#1

BigInt: RandomRange Funktion?

  Alt 31. Aug 2008, 19:45
Ich hab mir diese BigInt-Klasse runtergeladen und in mein neustes Projekt eingebunden. Nun bräuchte ich da aber ein Pendant zur RandomRange-Funktion aus der Math-Unit... Gibts sowas? Wenn nein: Wie kann man sowas programmieren? Nach welchen Regeln muss man da vorgehen?

MfG Z4ppy
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: BigInt: RandomRange Funktion?

  Alt 1. Sep 2008, 18:07
*push*

MfG Z4ppy
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: BigInt: RandomRange Funktion?

  Alt 1. Sep 2008, 18:20
Hallo.

In der Math.pas ist RandomRange definiert mit:

Delphi-Quellcode:
function RandomRange(const AFrom, ATo: Integer): Integer;
begin
  if AFrom > ATo then
    Result := Random(AFrom - ATo) + ATo
  else
    Result := Random(ATo - AFrom) + AFrom;
end;
Du brauchst also ein Random(), das mit BigInt funktioniert.

Leider enthält die BigInt.pas keine Random-Routine.

Eine Google recherche hat mich zu folgendem Forenbeitrag geführt:

http://www.delphi-forum.de/viewtopic...hlight=bignum2

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:
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;
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.

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: BigInt: RandomRange Funktion?

  Alt 1. Sep 2008, 18:25
Dummerweise sind die Zufallszahlen, die du mit der zweiten Methode erhältst, nicht gleich- sondern (annährend) normalverteilt.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: BigInt: RandomRange Funktion?

  Alt 1. Sep 2008, 18:33
Zitat von Apollonius:
Dummerweise sind die Zufallszahlen, die du mit der zweiten Methode erhältst, nicht gleich- sondern (annährend) normalverteilt.
Da kenne ich leider nicht die mathematischen Hintergründe. Aber ich denke, dass es doch ziemlich egal ist, wie die Verteilung ist, wenn man nicht unbedingt mit Verschlüsselungen arbeitet. Bei der Verschlüsselung ist ja die normale Delphi-Variante von Random() sehr unsicher, da sie nur mit der Systemzeit rechnet und teilweise berechenbar ist. Wenn Random() also unsicher ist, dann ist es ja egal, ob man n verschiedene Random's zusammenaddiert, oder?

// 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
Daniel Marschall
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: BigInt: RandomRange Funktion?

  Alt 1. Sep 2008, 18:37
Dummerweise arbeite ich mit Verschlüsselungen
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
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#7

Re: BigInt: RandomRange Funktion?

  Alt 1. Sep 2008, 18:40
Zitat von Z4ppy:
Gibts denn irgendwie "bessere" Random-Funktionen als die der Math-Unit?
Naja, wenn dus wirklich gut haben willst: Klick
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: BigInt: RandomRange Funktion?

  Alt 1. Sep 2008, 18:51
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: BigInt: RandomRange Funktion?

  Alt 1. Sep 2008, 18:52
Das macht doch nix - aus den Bytes erstellt man eine BigInt-Instanz und nimmt Min(candidate, max)
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: BigInt: RandomRange Funktion?

  Alt 1. Sep 2008, 18:54
Das hat dann aber wirklich nichts mehr mit Gleichverteilung zu tun.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz