setSeed($seed); } /** * @param int $seed Integer to be used as seed. */ public function setSeed($seed){ $this->seed = crc32(Binary::writeInt($seed)); } /** * Returns an 31-bit integer (not signed) * * @return int */ public function nextInt(){ return $this->nextSignedInt() & 0x7fffffff; } /** * Returns a 32-bit integer (signed) * * @return int */ public function nextSignedInt(){ $t = crc32(Binary::writeInt($this->seed)); $this->seed ^= $t; if($t > 2147483647){ $t -= 4294967296; } return (int) $t; } /** * Returns a float between 0.0 and 1.0 (inclusive) * * @return float */ public function nextFloat(){ return $this->nextInt() / 0x7fffffff; } /** * Returns a float between -1.0 and 1.0 (inclusive) * * @return float */ public function nextSignedFloat(){ return $this->nextSignedInt() / 0x7fffffff; } /** * Returns a random boolean * * @return bool */ public function nextBoolean(){ return ($this->nextSignedInt() & 0x01) === 0; } /** * Returns a random integer between $start and $end * * @param int $start default 0 * @param int $end default PHP_INT_MAX * * @return int */ public function nextRange($start = 0, $end = PHP_INT_MAX){ return $start + ($this->nextInt() % ($end + 1 - $start)); } }