state = 0 === $state ? 1 : $state; } /** * A pseudo-random integer in [$min, $max], inclusive. * * @param int $min Minimum (inclusive). * @param int $max Maximum (inclusive). */ public function int( int $min, int $max ): int { if ( $min >= $max ) { return $min; } $range = $max - $min + 1; return $min + ( $this->next() % $range ); } /** * A pseudo-random float in [0, 1). */ public function float(): float { return $this->next() / 4294967296.0; } /** * Advances the xorshift32 state and returns it. */ private function next(): int { $x = $this->state; $x ^= ( $x << 13 ) & 0xFFFFFFFF; $x ^= $x >> 17; $x ^= ( $x << 5 ) & 0xFFFFFFFF; $x &= 0xFFFFFFFF; $this->state = $x; return $x; } }