Subject: Re: bug#64441: 29.0.92; elisp arithmetic error at ielm prompt

From: Stephen Berman <[email-masked]>
Date: Mon, 03 Jul 2023 18:50:58 +0200

On Mon, 3 Jul 2023 16:20:34 GMT Van Ly via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <[email-masked]> wrote:

> Hello,
>
> The following calculation errors in elisp.
>
>   ELISP> (/ (* (/ 3 4) (/ 7 13)) (/ 5 12))
>   *** Eval error ***  Arithmetic error
>
> The SBCL repl doesn't.
>
>   CL-USER> (/ (* (/ 3 4) (/ 7 13)) (/ 5 12))
>   63/65 (0.9692308, 1260/13%)
>
> Steps to reproduce the error.
>
>   1. start using, 'emacs -Q'
>   2. get to the ielm elisp prompt, 'M-x ielm'
>   3. enter the above calculation

`/' in Elisp is different from `/' in Common Lisp.

(elisp) Arithmetic Operations:

  If all the arguments are integers, the result is an integer,
  obtained by rounding the quotient towards zero after each division.

Hence (/ 3 4), (/ 7 13) and (/ 5 12) all evaluate to 0, and "If you
divide an integer by the integer 0, Emacs signals an ‘arith-error’
error".

But in Common Lisp
(http://www.lispworks.com/documentation/HyperSpec/Body/f_sl.htm):

  If each argument is either an integer or a ratio, and the result is
  not an integer, then it is a ratio.

Hence (/ 3 4) => 3/4,  (/ 7 13) => 7/13 and (/ 5 12) => 5/12

Steve Berman