]> git.eshelyaron.com Git - emacs.git/commit
Fix bug with eql etc. on NaNs
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 18 Jul 2018 10:16:54 +0000 (03:16 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 18 Jul 2018 10:18:53 +0000 (03:18 -0700)
commitc70d22f70b77b053d01c7380122d166ecb728610
tree1fe0dee176da15fca2907c84abc7ec096b7e4116
parentba6cc1d04cef8e25534a72e90a8f0f8db0026c9f
Fix bug with eql etc. on NaNs

Fix a bug where eql, sxhash-eql, memql, and make-hash-table
were not consistent on NaNs.  Likewise for equal,
sxhash-equal, member, and make-hash-table.  Some of these
functions ignored NaN significands, whereas others treated
them as significant.  It's more logical to treat significands
as significant, and this typically makes eql a bit more
efficient on floats, with just one integer comparison instead
of one to three floating-point comparisons.
* doc/lispref/numbers.texi (Float Basics): Document that
NaNs are never numerically equal, but might be eql.
* src/fns.c (WORDS_PER_DOUBLE): Move to top level of this file.
(union double_and_words): Now named, and at the top level of this file.
(same_float): New function.
(Fmemql, Feql, internal_equal, cmpfn_eql): Use it, so that
the corresponding functions treat NaNs consistently.
(sxhash_float): Simplify based on above-mentioned changes.

* test/src/fns-tests.el (fns-tests-equality-nan): New test.
doc/lispref/numbers.texi
src/fns.c
test/src/fns-tests.el