# file name 'rastgele.py' import time PI = 3.141592653589793 COS_TABLOSU = [] HASSASIYET = 2000 def log(x, iterasyon=100): if x <= 0: raise ValueError("log tanimsiz") y = (x - 1) / (x + 1) y2 = y * y sonuc = 0.0 for i in range(iterasyon): n = 2 * i + 1 sonuc += (y ** n) / n return 2 * sonuc def cos(x): x = x % (2 * PI) if x > PI: x -= 2 * PI sonuc = 0.0 terim = 1.0 for i in range(1, 20): sonuc += terim terim *= -x * x / ((2 * i - 1) * (2 * i)) return sonuc def tohum_uret(): t = time.time() mikrosaniye = int(t * 1_000_000) a = mikrosaniye & 0xFFFF b = (mikrosaniye >> 16) & 0xFFFF c = (mikrosaniye >> 32) & 0xFFFF karisik = (a * b * c) ^ (a << 3) ^ (b >> 2) ^ c return karisik def rastgele(tohum, n): A = 1664525 C = 1013904223 M = 2**32 sonuclar = [] durum = tohum for _ in range(n): durum = (A * durum + C) % M sonuclar.append(durum / M) return sonuclar def gauss_rastgele(tohum, n): tekil = rastgele(tohum, n * 2 + 2) sonuclar = [] for i in range(0, n * 2, 2): u1 = max(tekil[i], 1e-10) u2 = tekil[i+1] ln = -2 * log(u1) kok = ln ** 0.5 cos_deg = cos(2 * PI * u2) sonuclar.append(kok * cos_deg) return sonuclar[:n]