diff --git a/Cargo.lock b/Cargo.lock index 912fe0c..7c2496a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -447,7 +447,7 @@ dependencies = [ [[package]] name = "factorion-math" -version = "1.0.3" +version = "1.0.4" dependencies = [ "gmp-mpfr-sys", "rug", diff --git a/factorion-math/Cargo.toml b/factorion-math/Cargo.toml index 2d3a054..6cd65d6 100644 --- a/factorion-math/Cargo.toml +++ b/factorion-math/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "factorion-math" -version = "1.0.3" +version = "1.0.4" edition = "2024" description = "The math (factorials and related functions) used by factorion" license = "MIT" diff --git a/factorion-math/src/lib.rs b/factorion-math/src/lib.rs index e14c99d..9884072 100644 --- a/factorion-math/src/lib.rs +++ b/factorion-math/src/lib.rs @@ -339,7 +339,10 @@ pub fn approximate_termial_digits_float(k: u32, n: Float) -> Integer { /// Will panic if `x` is not finite. pub fn adjust_approximate((x, e): (Float, Integer)) -> (Float, Integer) { let prec = x.prec(); - let (extra, _) = (x.clone().ln() / Float::with_val(prec, 10).ln()) + if x == 0.0 { + return (Float::with_val(prec, 0), Integer::ZERO.clone()); + } + let (extra, _) = (x.clone().abs().ln() / Float::with_val(prec, 10).ln()) .to_integer_round(rug::float::Round::Down) .unwrap_or_else(|| panic!("Got non-finite number, x was {x}")); let x = x / (Float::with_val(prec, 10).pow(extra.clone()));