#pragma once namespace fn::ds { // Distribucion Beta(a, b) y helpers numericos relacionados. Pure. // // log-Gamma via aproximacion de Lanczos (precision ~1e-15). double lgamma_lanczos(double x); // log B(a, b) = lgamma(a) + lgamma(b) - lgamma(a+b). double log_beta(double a, double b); // Beta PDF en x, parametros a, b. Soporta a > 0, b > 0; fuera del soporte // devuelve 0. Computado en log-space para estabilidad en a/b extremos. double beta_pdf(double x, double a, double b); // Beta CDF (regularized incomplete beta function I_x(a, b)). Continued // fraction algorithm, precision ~1e-12. double beta_cdf(double x, double a, double b); // Beta quantile (inverse CDF) por busqueda Newton + bisection fallback. // p en [0, 1]. Tolerancia 1e-6 sobre x. double beta_quantile(double p, double a, double b); // Mean = a / (a + b). double beta_mean(double a, double b); // Variance = (a*b) / ((a+b)^2 * (a+b+1)). double beta_variance(double a, double b); double beta_std(double a, double b); } // namespace fn::ds