From c47de279a765ce9151040f607f89a4b27c155d3d Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Fri, 13 Nov 2026 01:42:15 +0100 Subject: [PATCH] Keep huge finite values finite in round_to (#2309) Found while testing crates/geom/src/transform.rs:58 (round_to), used by crates/engine/src/automation/inspect.rs:517 (round) Co-authored-by: Claude Haiku 5.5 --- crates/geom/src/tests.rs | 6 ++++++ crates/geom/src/transform.rs | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/geom/src/tests.rs b/crates/geom/src/tests.rs index 019f22b83..897b9cbe6 100644 --- a/crates/geom/src/tests.rs +++ b/crates/geom/src/tests.rs @@ -306,6 +306,12 @@ fn round_to_handles_large_precision_without_changing_finite_values() { assert_eq!(round_to(1.23456, 2), 1.23); } +#[test] +fn round_to_keeps_huge_finite_values_finite() { + assert_eq!(round_to(1e307, 2), 1e307); + assert_eq!(round_to(-1e307, 2), -1e307); +} + #[test] fn reverse_subpaths_preserves_open_and_closed() { let mut open = BezPath::new(); diff --git a/crates/geom/src/transform.rs b/crates/geom/src/transform.rs index 69c6c788d..e0e743cd4 100644 --- a/crates/geom/src/transform.rs +++ b/crates/geom/src/transform.rs @@ -60,6 +60,11 @@ pub fn round_to(v: f64, digits: i32) -> f64 { if v.is_finite() && !f.is_finite() { return v; } - let r = (v * f).round() / f; + let scaled = v * f; + if v.is_finite() && !scaled.is_finite() { + // Too large to have a fractional part at this scale; already whole. + return v; + } + let r = scaled.round() / f; if r == 0.0 { 0.0 } else { r } }