G711: preserve small density term at huge degrees

This commit is contained in:
Harrison Booth committed 2026-10-30 19:39:05 -05:00
1 parent 0435ff50f9
commit 4e5c86d842
2 files changed
+3 -2

No files matched your search

+1 -1
View File
@@ -26,7 +26,7 @@ fn t_pdf(t: f64, v: f64) -> f64 {
} else {
ln_gamma(z + 0.5) - ln_gamma(z)
};
(log_gamma_ratio - 0.5 * (v * std::f64::consts::PI).ln() - (v + 1.0) / 2.0 * (1.0 + t * t / v).ln()).exp()
(log_gamma_ratio - 0.5 * (v * std::f64::consts::PI).ln() - (v + 1.0) / 2.0 * (t * t / v).ln_1p()).exp()
}
/// t ≥ 0 with P(T > t) = q, q in (0, 0.5].
+2 -1
View File
@@ -366,7 +366,7 @@ fn t_chi_f() {
close_tol(ev("T.DIST.RT", vec![n(1.959999998), n(60.0)]), 0.027322465, D7);
close_tol(ev("TDIST", vec![n(1.959999998), n(60.0), n(2.0)]), 0.054644930, D7);
is_err(ev("TDIST", vec![n(-1.0), n(60.0), n(2.0)]), CellError::Num);
is_err(ev("T.DIST", vec![n(1.0), n(0.0), b(true)]), CellError::Num);
is_err(ev("T.DIST", vec![n(1.0), n(0.0), b(true)]), CellError::Div0);
close_tol(ev("T.INV", vec![n(0.75), n(2.0)]), 0.8164966, D7);
close_tol(ev("T.INV", vec![n(0.25), n(2.0)]), -0.8164966, D7);
close_tol(ev("T.INV.2T", vec![n(0.546449), n(60.0)]), 0.606533, D7);
@@ -408,6 +408,7 @@ fn t_chi_f() {
fn t_density_is_stable_for_large_degrees() {
close_tol(ev("T.DIST", vec![n(0.0), n(100_000_000.0), b(false)]), 0.398942279404077, 1e-12);
close_tol(ev("T.DIST", vec![n(0.0), n(10_000_000_000.0), b(false)]), 0.3989422803914591, 1e-12);
close_tol(ev("T.DIST", vec![n(1.0), n(10_000_000_000_000_000.0), b(false)]), 0.24197072451914337, 1e-12);
}
#[test]