diff --git a/src/numerical/monte_carlo.py b/src/numerical/monte_carlo.py index 070ae2f..d496c0e 100644 --- a/src/numerical/monte_carlo.py +++ b/src/numerical/monte_carlo.py @@ -3,13 +3,17 @@ def monte_carlo_pi(num_samples: int) -> float: """Estimate π using Monte Carlo method.""" + # Use local variable lookups for functions used in loop (reduces attribute lookup in tight loop) + uniform = random.uniform + inside_circle = 0 + # Use local variable for accumulator + rng = (-1.0, 1.0) for _ in range(num_samples): - x = random.uniform(-1, 1) - y = random.uniform(-1, 1) - - if x**2 + y**2 <= 1: + x = uniform(*rng) + y = uniform(*rng) + if x * x + y * y <= 1.0: inside_circle += 1 return 4 * inside_circle / num_samples