Proper Xoshiro256 initialization with 256 bit seed
This commit is contained in:
parent
1a52864c4e
commit
b8291c7e1c
@ -9,11 +9,12 @@ import net.minecraft.world.level.levelgen.RandomSupport
|
|||||||
import java.lang.StringBuilder
|
import java.lang.StringBuilder
|
||||||
import java.util.random.RandomGenerator
|
import java.util.random.RandomGenerator
|
||||||
|
|
||||||
class Xoshiro256SSRandom(
|
class Xoshiro256SSRandom private constructor(
|
||||||
private var s0: Long,
|
private var s0: Long,
|
||||||
private var s1: Long,
|
private var s1: Long,
|
||||||
private var s2: Long,
|
private var s2: Long,
|
||||||
private var s3: Long,
|
private var s3: Long,
|
||||||
|
marker: Nothing?
|
||||||
) : RandomGenerator, RandomSource {
|
) : RandomGenerator, RandomSource {
|
||||||
private val gaussian = MarsagliaPolarGaussian(this)
|
private val gaussian = MarsagliaPolarGaussian(this)
|
||||||
|
|
||||||
@ -26,11 +27,17 @@ class Xoshiro256SSRandom(
|
|||||||
) { "Xoshiro can't operate with seed being entirely zero" }
|
) { "Xoshiro can't operate with seed being entirely zero" }
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(seed: Long) : this(1L, 2L, 3L, 4L) {
|
constructor(s0: Long, s1: Long, s2: Long, s3: Long) : this(s0, s1, s2, s3, null) {
|
||||||
|
// discard some values so generator can get going if provided seed was "weak"
|
||||||
|
for (i in 0 until 32)
|
||||||
|
nextLong()
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(seed: Long) : this(1L, 2L, 3L, 4L, null) {
|
||||||
setSeed(seed)
|
setSeed(seed)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor() : this(RandomSupport.generateUniqueSeed(), RandomSupport.generateUniqueSeed(), RandomSupport.generateUniqueSeed(), RandomSupport.generateUniqueSeed())
|
constructor() : this(RandomSupport.generateUniqueSeed(), RandomSupport.generateUniqueSeed(), RandomSupport.generateUniqueSeed(), RandomSupport.generateUniqueSeed(), null)
|
||||||
|
|
||||||
override fun setSeed(seed: Long) {
|
override fun setSeed(seed: Long) {
|
||||||
val rng = LCG64Random(seed)
|
val rng = LCG64Random(seed)
|
||||||
|
Loading…
Reference in New Issue
Block a user