all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#42597: 27.1; (+ -0.0) returns +0.0 when compiled
@ 2020-07-29 12:07 Mattias Engdegård
  2020-07-29 13:41 ` bug#42597: 27.1; (+ -0.0) returns +0.0 when compiled (fwd) Alan Mackenzie
  0 siblings, 1 reply; 5+ messages in thread
From: Mattias Engdegård @ 2020-07-29 12:07 UTC (permalink / raw)
  To: 42597

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!






^ permalink raw reply	[flat|nested] 5+ messages in thread
[parent not found: <20200729133532.21725.qmail@mail.muc.de>]

end of thread, other threads:[~2020-08-07  8:50 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-07-29 12:07 bug#42597: 27.1; (+ -0.0) returns +0.0 when compiled Mattias Engdegård
2020-07-29 13:41 ` bug#42597: 27.1; (+ -0.0) returns +0.0 when compiled (fwd) Alan Mackenzie
2020-07-29 18:32   ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
     [not found] <20200729133532.21725.qmail@mail.muc.de>
2020-08-03 15:36 ` bug#42597: 27.1; (+ -0.0) returns +0.0 when compiled Mattias Engdegård
2020-08-07  8:50   ` Mattias Engdegård

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.