Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#14

Re: BigInt: RandomRange Funktion?

  Alt 1. Sep 2008, 20:39
Zitat von Z4ppy:
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?
ctx ist ein Kontext-Record, d.h. Du kannst mehrere Generatoren gleichzeitig haben, bei Delphi hast Du nur einen Kontext nämlich randseed (ein Kontext ist so ähnlich wie eine Klasse oder ein Objekt). Rufe eine der Init-Prozeduren mit Deinen seed(s) auf und dann eine der Funktion isaac_word, oder isaac_long etc. Wenn Du viele Bytes brauchst isaac_read. Wenn Du ein 32-Bit Dword brauchst geht's mit ctx.next und ctx.nextres.

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:
Wie generiert man dort nun eine Zufallszahl zwischen 1 und x?
Soll wohl heißen 1 <= ZZ <= x: Wenn dein x zwischen 2^(n-1) und 2^n liegt, mußt Du mindestens n Bits erzeugen, d.h. Du liest mindestens n bits in ein bigint y, bildest y mod x und addierst 1. Bei der letzten Frage: mit x mod R ist halt zwischen 0 und R-1 und wenn Du 1 draufaddierst zwischen 1 und R.

Gammatester
  Mit Zitat antworten Zitat