Implement the Exponential distribution PDF and CDF. The exponential distribution models the time between events in a Poisson process, parameterized by rate lambda.
import math
from typing import Dict
def exponential_pdf(x: float, lam: float) -> float:
if lam <= 0:
raise ValueError("Rate parameter lambda must be positive")
if x < 0:
return 0.0
return lam * math.exp(-lam * x)
def exponential_cdf(x: float, lam: float) -> float:
if lam <= 0:
raise ValueError("Rate parameter lambda must be positive")
if x < 0:
return 0.0
return 1.0 - math.exp(-lam * x)
def exponential_statistics(lam: float) -> Dict[str, float]:
if lam <= 0:
raise ValueError("Rate parameter lambda must be positive")
return {
"mean": round(1.0 / lam, 4),
"variance": round(1.0 / (lam ** 2), 4),
"std_dev": round(1.0 / lam, 4),
"median": round(math.log(2) / lam, 4)
}
def exponential_quantile(p: float, lam: float) -> float:
if p < 0 or p > 1:
raise ValueError("Probability must be in [0, 1]")
if lam <= 0:
raise ValueError("Rate parameter lambda must be positive")
if p == 1:
return float('inf')
return -math.log(1 - p) / lam