# const int n_p_pad = (n_p + 3) & ~3; # flops per iteration (one pass of the outer time loop): # ADDs: n_p * 12 + n_p * n_p_pad * 29 + n_p * board.n_obstacles * 12 + n_p * 7 # MULTs: n_p * 4 + n_p * n_p_pad * 40 + n_p * board.n_obstacles * 19 + n_p * 16 # DIVs: n_p * n_p_pad * 1 + n_p * board.n_obstacles + n_p * 2 # SQRTs: n_p * n_p_pad * 3 + n_p * board.n_obstacles + n_p * 3 # EXPs: n_p * board.n_obstacles def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int: n_p_pad = (n_p + 3) & ~3 return int(n_iter * (n_p * 12 + n_p * n_p_pad * 29 + n_p * n_obs * 12 + n_p * 7)) def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int: n_p_pad = (n_p + 3) & ~3 return int(n_iter * (n_p * 4 + n_p * n_p_pad * 40 + n_p * n_obs * 19 + n_p * 16)) def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int: n_p_pad = (n_p + 3) & ~3 return int(n_iter * (n_p * n_p_pad * 1 + n_p * n_obs + n_p * 2)) def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int: n_p_pad = (n_p + 3) & ~3 return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p * 3)) def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int: n_p_pad = (n_p + 3) & ~3 return int(n_iter * (n_p * n_obs)) def total(n_iter: int, n_p: int, n_obs: int = 2) -> int: return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs( n_iter, n_p, n_obs) + sqrts(n_iter, n_p, n_obs) + exps(n_iter, n_p, n_obs) * 30