Experimental evidence for uniform distribution:
# uniform.py
import random
n = 10**4
samples = 10**6
counts = [0] * 10
for i in range(samples):
random_number = random.randint(1, n)
first_digit = int(str(random_number)[0])
counts[first_digit] += 1
for i, count in enumerate(counts):
print('{} => {:.3f}'.format(i, counts[i] / samples))
Output: $ python3 uniform.py
0 => 0.000
1 => 0.111
2 => 0.111
3 => 0.111
4 => 0.111
5 => 0.111
6 => 0.111
7 => 0.111
8 => 0.111
9 => 0.111
Experimental evidence for exponential distribution: # exponential.py
import random
n = 10**4
samples = 10**6
counts = [0] * 10
for i in range(samples):
random_number = 2 ** random.randint(1, n)
first_digit = int(str(random_number)[0])
counts[first_digit] += 1
for i, count in enumerate(counts):
print('{} => {:.3f}'.format(i, counts[i] / samples))
Output: $ python3 exponential.py
0 => 0.000
1 => 0.301
2 => 0.176
3 => 0.125
4 => 0.097
5 => 0.079
6 => 0.067
7 => 0.058
8 => 0.051
9 => 0.046