Pseudo-random numbers/Xorshift star: Difference between revisions

Line 691:
0: 20103 1: 19922 2: 19937 3: 20031 4: 20007
</pre>
 
=={{header|Kotlin}}==
{{trans|Java}}
<lang scala>import kotlin.math.floor
 
class XorShiftStar {
private var state = 0L
 
fun seed(num: Long) {
state = num
}
 
fun nextInt(): Int {
var x = state
x = x xor (x ushr 12)
x = x xor (x shl 25)
x = x xor (x ushr 27)
state = x
 
return (x * MAGIC shr 32).toInt()
}
 
fun nextFloat(): Float {
return nextInt().toUInt().toFloat() / (1L shl 32)
}
 
companion object {
private const val MAGIC = 0x2545F4914F6CDD1D
}
}
 
fun main() {
val rng = XorShiftStar()
 
rng.seed(1234567)
println(rng.nextInt().toUInt())
println(rng.nextInt().toUInt())
println(rng.nextInt().toUInt())
println(rng.nextInt().toUInt())
println(rng.nextInt().toUInt())
println()
 
rng.seed(987654321)
val counts = arrayOf(0, 0, 0, 0, 0)
for (i in 1..100000) {
val j = floor(rng.nextFloat() * 5.0).toInt()
counts[j]++
}
for (iv in counts.withIndex()) {
println("${iv.index}: ${iv.value}")
}
}</lang>
{{out}}
<pre>3540625527
2750739987
4037983143
1993361440
3809424708
 
0: 20103
1: 19922
2: 19937
3: 20031
4: 20007</pre>
 
=={{header|Lua}}==
1,452

edits