Exemplo n.º 1
0
 /**
  * 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;
         }
     }
 }
Exemplo n.º 2
0
 /**
  *
  */
 public function next()
 {
     return RandomNumberGenerator::next();
 }
Exemplo n.º 3
0
 /**
  * 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;
 }
Exemplo n.º 4
0
 /**
  * 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;
 }
Exemplo n.º 5
0
 /**
  * Returns the next random number.
  *
  * @return float The next random number.
  */
 public function next()
 {
     return -$this->mu * log(RandomNumberGenerator::next());
 }
Exemplo n.º 6
0
 /**
  * Returns the next random sample.
  *
  * @return float The next sample.
  */
 public function next()
 {
     return $this->u + ($this->v - $this->u) * RandomNumberGenerator::next();
 }