#!/usr/bin/python

M = 2 ** 16
a = 997
b = 1
x = 12345
N = 100

f = lambda e: '{0:<06}'.format(round(e, 4))

arr = []
for _ in range(N):
    x = (a * x + b) % M
    arr.append(float(x) / M)
print(''.join(e + ('\t' if (i+1)%10 else '\n') for i, e in enumerate(map(f, arr))))
print('平均={0}'.format(f(sum(arr) / N)))
N = 100

def rng(M=2**16, a=997, b=1, seed=12345):
    x = seed
    while True:
        x = (a * x + b) % M
        yield x / M
rand = rng()
arr = [next(rand) for _ in range(N)]

fmt = lambda e: f'{round(e, 4):<06}'
print(''.join(fmt(e) + ('\t' if (i+1)%10 else '\n') for i, e in enumerate(arr)))
print(f'平均={fmt(sum(arr) / N)}')

thresholds = [n/10 for n in range(10)]
hist = [0] * len(thresholds)
for e in arr:
    bin_idx = next((i-1 for i,th in enumerate(thresholds) if e < th), -1)
    hist[bin_idx] += 1
print('\n'.join(f"{th}: {'*' * int(hist[i]/(N/10)*30)}" for i,th in enumerate(thresholds)))

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS