Pseudo-random numbers/Xorshift star: Difference between revisions

Line 811:
3: 20031
4: 20007</pre>
 
=={{header|Nim}}==
<lang Nim>import algorithm, sequtils, strutils, tables
 
const C = 0x2545F4914F6CDD1Du64
 
type XorShift = object
state: uint64
 
func seed(gen: var XorShift; num: uint64) =
gen.state = num
 
func nextInt(gen: var XorShift): uint32 =
var x = gen.state
x = x xor x shr 12
x = x xor x shl 25
x = x xor x shr 27
gen.state = x
result = uint32((x * C) shr 32)
 
func nextFloat(gen: var XorShift): float =
gen.nextInt().float / float(0xFFFFFFFFu32)
 
 
when isMainModule:
 
var gen: XorShift
 
gen.seed(1234567)
 
for _ in 1..5:
echo gen.nextInt()
 
echo ""
gen.seed(987654321)
var counts: CountTable[int]
for _ in 1..100_000:
counts.inc int(gen.nextFloat() * 5)
echo sorted(toSeq(counts.pairs)).mapIt($it[0] & ": " & $it[1]).join(", ")</lang>
 
{{out}}
<pre>3540625527
2750739987
4037983143
1993361440
3809424708
 
0: 20103, 1: 19922, 2: 19937, 3: 20031, 4: 20007</pre>
 
=={{header|Perl}}==
Anonymous user