From a40d1d504a6eeb457c5c8a1d39b93301d9c34f28 Mon Sep 17 00:00:00 2001 From: Jeronimo Pellegrini Date: Thu, 6 Apr 2023 09:38:09 -0300 Subject: [PATCH] Make (log x 0) return 0 (as per the spec) The CL spec says that "If base is zero, log returns zero." But ECL was not checking for zero, so a divide by zero error was generated. This patch makes it return zero when the base is zero: > (log 1 0) 0 > (log 1/2 0) 0 > (log #C(2 1) 0) 0 > (log 2 0.0) 0 --- src/c/numbers/log.d | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/c/numbers/log.d b/src/c/numbers/log.d index 7745a6472..6ff500752 100644 --- a/src/c/numbers/log.d +++ b/src/c/numbers/log.d @@ -384,6 +384,9 @@ MATH_DEF_DISPATCH1(log1_long_precision, @[log], @[number], cl_object ecl_log2(cl_object x, cl_object y) { + /* The spec says "If base is zero, log returns zero" */ + if (ecl_zerop(x)) return ecl_make_fixnum(0); + cl_type tx = ecl_t_of(x); cl_type ty = ecl_t_of(y); /* Prevent loss of precision from intermediate single float results */ -- GitLab