bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#42597: 27.1; (+ -0.0) returns +0.0 when compiled


From: Mattias Engdegård
Subject: bug#42597: 27.1; (+ -0.0) returns +0.0 when compiled
Date: Wed, 29 Jul 2020 14:07:32 +0200

Unary +, *, min and max, all of which should be identity for numbers, convert 
-0.0 to +0.0 when byte-compiled:

(defun f (x) (+ x))
(f -0.0)
=> -0.0
(byte-compile 'f)
(f -0.0)
=> 0.0

The reason is that byte-compile-associative transforms (+ x), (* x), (min x) 
and (max x) into (+ x 0).

No patch yet (sorry!) but I'm not sure what would be the best way to go about 
it. Some possibilities:

A. Use a full 1-argument call, like (+ x). This is more expensive (about 1.8×) 
since the general function call mechanism has to be used.
B. Use (* x 1) instead; this appears to work. This is also more expensive 
(1.6×); not sure why.
C. Add a new byte-op. Fast but probably overkill.

Better suggestions welcome!






reply via email to

[Prev in Thread] Current Thread [Next in Thread]