Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here's one simple check that you can perform. It uses generated random numbers to estimate Pi. It's not proof of randomness, but poor RNGs typically don't do well on it (they will return something like 2.5 or 3.8 rather ~3.14).</p> <p>Ideally this would be just one of many tests that you would run to check randomness.</p> <p>Something else that you can check is the <a href="http://en.wikipedia.org/wiki/Standard_deviation" rel="noreferrer">standard deviation</a> of the output. The expected standard deviation for a uniformly distributed population of values in the range 0..n approaches n/sqrt(12).</p> <pre><code>/** * This is a rudimentary check to ensure that the output of a given RNG * is approximately uniformly distributed. If the RNG output is not * uniformly distributed, this method will return a poor estimate for the * value of pi. * @param rng The RNG to test. * @param iterations The number of random points to generate for use in the * calculation. This value needs to be sufficiently large in order to * produce a reasonably accurate result (assuming the RNG is uniform). * Less than 10,000 is not particularly useful. 100,000 should be sufficient. * @return An approximation of pi generated using the provided RNG. */ public static double calculateMonteCarloValueForPi(Random rng, int iterations) { // Assumes a quadrant of a circle of radius 1, bounded by a box with // sides of length 1. The area of the square is therefore 1 square unit // and the area of the quadrant is (pi * r^2) / 4. int totalInsideQuadrant = 0; // Generate the specified number of random points and count how many fall // within the quadrant and how many do not. We expect the number of points // in the quadrant (expressed as a fraction of the total number of points) // to be pi/4. Therefore pi = 4 * ratio. for (int i = 0; i &lt; iterations; i++) { double x = rng.nextDouble(); double y = rng.nextDouble(); if (isInQuadrant(x, y)) { ++totalInsideQuadrant; } } // From these figures we can deduce an approximate value for Pi. return 4 * ((double) totalInsideQuadrant / iterations); } /** * Uses Pythagoras' theorem to determine whether the specified coordinates * fall within the area of the quadrant of a circle of radius 1 that is * centered on the origin. * @param x The x-coordinate of the point (must be between 0 and 1). * @param y The y-coordinate of the point (must be between 0 and 1). * @return True if the point is within the quadrant, false otherwise. */ private static boolean isInQuadrant(double x, double y) { double distance = Math.sqrt((x * x) + (y * y)); return distance &lt;= 1; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload