2012-04-04 16 views
4

Mit dem XorShift-Zufallszahlengenerator ... Ich habe bereits den Generator, aber ich war nicht in der Lage, es zu ändern, um eine Zahl zwischen 0 und einer oberen Grenze (wie die nextInt() Methode in der Java Random Klasse).Generieren einer Zufallszahl zwischen 0 und x (Java)

long seed = System.nanoTime(); 

    int next(int nbits) { 
    long x = seed; 
    x ^= (x << 21); 
    x ^= (x >>> 35); 
    x ^= (x << 4); 
    seed = x; 
    x &= ((1L << nbits) -1); 
    return (int) x; 
    } 

Irgendwelche Ideen?

+1

Können Sie '((int) x)% (upper_limit + 1)'? (Das ist eine aufrichtige Frage; ich weiß nicht genug über die Eigenschaften von Xorshift - insbesondere darüber, wie viel Entropie es in den unteren Bits hat - zu wissen, ob das eine gute Idee ist.) – ruakh

+0

Verwenden Sie die Restfunktion - n% x –

+0

Ich dachte darüber nach, aber ich hatte das Gefühl, dass dies die kryptographische Stärke beeinflussen würde. Gibt es keinen Grund, warum es sich darauf auswirken sollte? – ppepper

Antwort

4

können Sie sehen, welche Java funktioniert mit random class

+0

Das OP kennt diese Klasse, da sie es in der Frage erwähnt haben. –

+1

Ich weiß, aber ich glaube, die OP las nie den Quellcode dieser Klasse oder er war in der Lage, das Problem zu lösen. Also verbinde ich die Quellen. – dash1e

+2

@PaulBellora: Aber (s) war er vielleicht nicht bewusst, dass es eine Open-Source-Implementierung dieser Klasse gibt. (Beachten Sie, dass diese Antwort direkt mit Quellcode verknüpft ist.) – ruakh