Am 07.06.15 um 08:27 schrieb Cecil Westerhof:
I wrote a very simple function to test random:
def test_random(length, multiplier = 10000):
number_list = length * [0]
for i in range(length * multiplier):
number_list[random.randint(0, length - 1)] += 1
minimum = min(number_list)
maximum = max(number_list)
return (minimum, maximum, minimum / maximum)
It shows that when the first parameter increases the deviation
increases and when the second parameter increases the deviation
decreases. Exactly what you would expect. But what are the ranges you
would expect with a good random function. Then it could be used to
test a random function.
Random number generators (RNG or PRNG) are usually tested using similar
methods, where the outcome can be assigned a probability distribution.
For example, diehard is a famous sequence of tests for RNGs.
http://en.wikipedia.org/wiki/Diehard_tests
You are only checking for uniform distribution. This couldn't detect
correlation, for instance if the RNG would just return increasing
numbers. A better check for uniformness could be done by the chi square
test or Kolmogorov-Smirnov. Then there are tables which relate the
deviations to significance.
Christian
--
https://mail.python.org/mailman/listinfo/python-list