Skip to content

Commit 156edad

Browse files
authored
Merge pull request #92 from juntyr/mod-zero-inf
Fix np.mod(0, inf)
2 parents dfe4bdd + 68530cd commit 156edad

2 files changed

Lines changed: 12 additions & 1 deletion

File tree

src/include/ops.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,11 @@ quad_mod(const Sleef_quad *a, const Sleef_quad *b)
629629

630630
// finite % inf
631631
if (quad_isfinite(a) && quad_isinf(b)) {
632+
// 0 % inf
633+
if (Sleef_icmpeqq1(*a, QUAD_PRECISION_ZERO)) {
634+
return Sleef_copysignq1(*a, *b);
635+
}
636+
632637
int sign_a = quad_signbit(a);
633638
int sign_b = quad_signbit(b);
634639

@@ -1241,6 +1246,10 @@ ld_mod(const long double *a, const long double *b)
12411246
return NAN;
12421247

12431248
if (isfinite(*a) && isinf(*b)) {
1249+
// 0 % inf
1250+
if (*a == 0.0L) {
1251+
return copysignl(*a, *b);
1252+
}
12441253
int sign_a = signbit(*a);
12451254
int sign_b = signbit(*b);
12461255
return (sign_a == sign_b) ? *a : *b;

tests/test_quaddtype.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2629,7 +2629,8 @@ def test_array_operations():
26292629
# Finite % infinity cases
26302630
(5.0, float('inf')), (-5.0, float('inf')),
26312631
(5.0, float('-inf')), (-5.0, float('-inf')),
2632-
(0.0, float('inf')), (-0.0, float('-inf')),
2632+
(0.0, float('inf')), (-0.0, float('inf')),
2633+
(0.0, float('-inf')), (-0.0, float('-inf')),
26332634
26342635
# NaN cases (should return NaN)
26352636
(float('nan'), 3.0), (3.0, float('nan')), (float('nan'), float('nan')),
@@ -2674,6 +2675,7 @@ def test_mod(a, b, backend, op):
26742675
if numpy_result == 0.0:
26752676
numpy_sign = np.signbit(numpy_result)
26762677
quad_sign = np.signbit(quad_result)
2678+
assert quad_result == 0, f"Zero mismatch for {a} % {b}: numpy={numpy_result}, quad={quad_result}"
26772679
assert numpy_sign == quad_sign, f"Zero sign mismatch for {a} % {b}: numpy={numpy_sign}, quad={quad_sign}"
26782680

26792681
# Check that non-zero results have correct sign relative to divisor

0 commit comments

Comments
 (0)