/** * Sorter test method. * * @param object ISorter $sorter The sorter to test. * @param integer $n The length of array to test. * @param integer $seed A seed for the random number generator. * @param integer $m If given, data values are restricted to [0,m-1]. * (Optional). */ public static function test(ISorter $sorter, $n, $seed, $m = 0) { //printf("AbstractSorter test program.\n"); RandomNumberGenerator::setSeed($seed); $data = new BasicArray($n); for ($i = 0; $i < $n; ++$i) { $datum = intval(RandomNumberGenerator::next() * Limits::MAXINT); if ($m != 0) { $datum = $datum % $m; } $data[$i] = $datum; } $timer = new Timer(); $timer->start(); $sorter->sort($data); $timer->stop(); $datum = sprintf("%s %d %d %f", $sorter->getClass()->getName(), $n, $seed, $timer->getElapsedTime()); fprintf(STDOUT, "%s\n", $datum); fprintf(STDERR, "%s\n", $datum); for ($i = 1; $i < $n; ++$i) { if ($data[$i] < $data[$i - 1]) { printf("FAILED\n"); break; } } }
/** * */ public function next() { return RandomNumberGenerator::next(); }
/** * Main program. * * @param array $args Command-line arguments. * @return integer Zero on success; non-zero on failure. */ public static function main($args) { printf("RandomNumberGenerator main program.\n"); $status = 0; RandomNumberGenerator::setSeed(1); for ($i = 0; $i < 10; ++$i) { printf("%.15f\n", RandomNumberGenerator::next()); } return $status; }
/** * Computes the value of pi. * Uses a monte-carlo algorithm. * * @param integer $trials The number of trials to be done. * @return float The value of pi. */ public static function computePi($trials) { $hits = 0; for ($i = 0; $i < $trials; ++$i) { $x = RandomNumberGenerator::next(); $y = RandomNumberGenerator::next(); if ($x * $x + $y * $y < 1.0) { ++$hits; } } return 4.0 * $hits / $trials; }
/** * Returns the next random number. * * @return float The next random number. */ public function next() { return -$this->mu * log(RandomNumberGenerator::next()); }
/** * Returns the next random sample. * * @return float The next sample. */ public function next() { return $this->u + ($this->v - $this->u) * RandomNumberGenerator::next(); }