#author("2026-07-10T08:34:38+09:00;2023-02-23T23:33:34+09:00","default:vip","vip")
#author("2026-07-10T08:51:52+09:00;2023-02-23T23:33:34+09:00","default:vip","vip")
 #!/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(*(fmt(e) + (' ' if (i+1)%10 else '\n') for i, e in enumerate(arr)), sep='')
 for i,e in enumerate(arr):
     print(fmt(e), end=(' ' if (i+1)%10 else '\n'))
 print()
 print(f'平均={fmt(sum(arr) / N)}')
 
 
 # ヒストグラム表示
 import bisect
 bounds = [n/10 for n in range(10)]
 hist = [0] * len(bounds)
 for e in arr:
     bin_idx = bisect.bisect(bounds, e) - 1
     hist[bin_idx] += 1
 print()
 WIDTH = 30
 print(*(f"{b}: {'*' * int(hist[i]/(N/10)*WIDTH)}" for i,b in enumerate(bounds)), sep='\n')
 print('\n'.join(f"{b}: {'*' * int(hist[i]/(N/10)*WIDTH)}" for i,b in enumerate(bounds)))

>
 0.0: ***************************************
 0.1: ******************
 0.2: ************************************
 0.3: ******************
 0.4: ******************************
 0.5: *********************************
 0.6: *********************************
 0.7: ************************
 0.8: *********************************
 0.9: ************************************

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS