Weiß jemand was diese Fortran-90 - Funktionen machen (KISS - Zufallszahlengenerator)?

... komplette Frage anzeigen

2 Antworten

IOER und IAND sind Funktionen, die aus zwei Zahlen durch Vergleich an den einzelnen Bitstellen eine neue Zahl ausgeben.

IOER ist das "exklusive oder" und IAND ist das "und".

Wenn du z.B. in IOER zwei integers x und y eingibst, so sind diese im Speicher in Binärdarstellung gegeben, wobei die n-te Stelle dem n-ten Bit entspricht (wenn wir ein Vorzeichenbit weglassen). IOER gibt eine neue Zahl aus, und diese hat im n-ten Bit eine 1, wenn entweder x oder y (aber nicht beide) im n-ten Bit eine 1 haben, sonst eine 0.

IAND ist sehr ähnlich, die return-value hat im n-ten Bit eine 1 genau dann wenn x und y im n-ten Bit eine 1 haben, sonst eine 0.

ISHIFT nimmt zwei integers x und s und gibt eine neue Zahl aus, die in der Binärdarstellung x um s Bits verschoben ist. z.B. 1 wäre 000000..1, dann wäre ISHIFT(1,1) = 000...010 = 2. Wenn du eine negative Zahl eingibst, wird in die andere Richtung geschoben. Von der Seite, von der aus du schiebst, werden an den benötigten Stellen Nullen eingefügt. Z.B. ISHIFT(111...1,1) = 11111..10, ISHIFT(111...1,-1) = 0111..11

LG

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DepravedGirl
06.02.2016, 19:37

Recht herzlichen Dank für deine Antwort !

Ich werde mich mal damit auseinandersetzen.

1

Ich habe mal die Logik an den Iterationrechner übergeben:

http://www.lamprechts.de/u?u=7

siehe Bild mit Zufallszahlen

Allerdings kann ich nicht garantieren, dass:

- shift(x, y) identisch ist zu x≪(y) ; könnte auch ((y<0)?x≪x≫(-y)) sein

- Obergrenze bei aC[0]=pow(2,32); liegt; kann auch 31 oder 63 oder 64 ...

- wie Fortran genau negative Zahlen behandelt (abschneiden; Überlauf...)

Im Bild sieht man aber schön die Zufallszahlen

Übrigens ist der Algorithmus im Beispiel 19 viel einfacher, da nur Modulo (kennt auch Basic) und er hat auch mindestens Periode 2^61

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DepravedGirl
07.02.2016, 07:04

Recht herzlichen Dank für deine Antwort !

Zitat von dir -->

Im Bild sieht man aber schön die Zufallszahlen.

Dieser KISS-Generator besteht ja aus einer Kombination von 3 Generatoren.

- Linearer Kongruenzgenerator

- Xorshift

- Multiply-with-carry

Über den Xorshift - Generator sagt Wikipedia -->

Der Xorshift-Generator ist dem Mersenne-Twister zumindest ebenbürtig, wenn nicht sogar überlegen.

Über den KISS-Generator selber sagt Wikipedia -->

Die Kombination in Form des KISS-Generators besteht jedoch alle
statistischen Tests aus dem BigCrush-Test der TestU01-Bibliothek.

----------------------------------------------------------------------------------------

Also, ja, diese Zufallszahlen des KISS-Generators sind schön.

Allerdings weiß ich noch nicht einmal, ob das Fortran-Programm von oben auch wirklich fehlerfrei geschrieben wurde, es ist nicht das erste mal, dass ich ein vermeintlich fehlerfreies Programm gefunden habe, was sich hinterher als mit Fehlern behaftet herausgestellt hat, und damit meine ich nicht nur Fortran-Programme.

Das negative Zahlen auftauchen ist schon merkwürdig, aber du hast ja geschrieben, dass du nicht weißt wie das originale Fortran das mit den negativen Zahlen handhabt.

Vielleicht werde ich mich mal auf die Suche nach einem Fortran-Compiler für Linux machen und das Programm direkt laufen lassen.

1

Was möchtest Du wissen?