summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoritchyny <itchyny@cybozu.co.jp>2023-07-05 04:28:08 +0900
committerGitHub <noreply@github.com>2023-07-05 04:28:08 +0900
commit886a9b18b10e4e31b8c746d1f243043d2b7ea234 (patch)
treee2cbaf7507aa49fdca9e751c2cd7762c0c5bccc2
parentdfd440f0deae4df056ea8c3a7b216b357ee2f324 (diff)
Make 0 divided by 0 results in NaN consistently (#2253)
-rw-r--r--src/builtin.c2
-rw-r--r--tests/jq.test5
2 files changed, 6 insertions, 1 deletions
diff --git a/src/builtin.c b/src/builtin.c
index 2d1156dc..e8eb2ef3 100644
--- a/src/builtin.c
+++ b/src/builtin.c
@@ -381,7 +381,7 @@ static jv f_multiply(jq_state *jq, jv input, jv a, jv b) {
static jv f_divide(jq_state *jq, jv input, jv a, jv b) {
jv_free(input);
if (jv_get_kind(a) == JV_KIND_NUMBER && jv_get_kind(b) == JV_KIND_NUMBER) {
- if (jv_number_value(b) == 0.0)
+ if (jv_number_value(b) == 0.0 && jv_number_value(a) != 0.0)
return type_error2(a, b, "cannot be divided because the divisor is zero");
jv r = jv_number(jv_number_value(a) / jv_number_value(b));
jv_free(a);
diff --git a/tests/jq.test b/tests/jq.test
index e62949b7..8a7ccc0e 100644
--- a/tests/jq.test
+++ b/tests/jq.test
@@ -1578,6 +1578,11 @@ try (1/.) catch .
0
"number (1) and number (0) cannot be divided because the divisor is zero"
+0/0, (0 as $x | $x/0) | isnan
+0
+true
+true
+
try (1%.) catch .
0
"number (1) and number (0) cannot be divided (remainder) because the divisor is zero"