import numpy as np
import matplotlib.pyplot as plt
I_min = 512
I_max = 1024
L = 16
K_min = I_max
K_max = 1 << 20
overshoots = []
I_list = []
for K in range(K_min, K_max + 1, L):
min_overshoot = 10 * I_max best_I = -1
for I in range(I_min, I_max + 1, L):
ceil_K = ((K + I - 1) // I) * I
overshoot = ceil_K - K
if overshoot <= min_overshoot:
min_overshoot = overshoot
best_I = I
overshoots.append(min_overshoot)
I_list.append(best_I)
if K % (K_max // 8) == 0:
print("K: %d" % K);
overshoots = np.array(overshoots)
I_list = np.array(I_list)
print("Average overshoot: %f" % np.mean(overshoots))
print("Max overshoot: %d" % np.max(overshoots))
print("Average I: %f" % np.mean(I_list))
plt.subplot(121)
plt.hist(overshoots, bins = "auto")
plt.title("Overshoots")
plt.subplot(122)
plt.hist(I_list, bins = "auto")
plt.title("I")
plt.show()