From 9e8e5a1e819ac3b0848596ec12fafe05423d4b00 Mon Sep 17 00:00:00 2001 From: yt2b Date: Sun, 22 Jan 2023 14:43:58 +0900 Subject: [PATCH] Fix mod_ --- common/src/float_ops.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/common/src/float_ops.rs b/common/src/float_ops.rs index eaaf155ad..cd15c2106 100644 --- a/common/src/float_ops.rs +++ b/common/src/float_ops.rs @@ -336,11 +336,12 @@ pub fn div(v1: f64, v2: f64) -> Option { pub fn mod_(v1: f64, v2: f64) -> Option { if v2 != 0.0 { - let mut val = v1 % v2; - if (val < 0.0) != (v2 < 0.0) { - val += v2; + let val = v1 % v2; + match (v1.signum() as i32, v2.signum() as i32) { + (1, 1) | (-1, -1) => Some(val), + _ if (v1 == 0.0) || (v1.abs() == v2.abs()) => Some(val.copysign(v2)), + _ => Some((val + v2).copysign(v2)), } - Some(val) } else { None }