diff options
| author | Paul Eggert | 2017-03-02 09:11:11 -0800 |
|---|---|---|
| committer | Paul Eggert | 2017-03-02 09:12:49 -0800 |
| commit | 4e2622bf0d63c40f447d44e6401ea054ef55b261 (patch) | |
| tree | 10f66df3cd59695ffe15546aaa961987a3fe2ba1 /src/bytecode.c | |
| parent | d546be31a9320d94769cb322f008f49d08d852a8 (diff) | |
| download | emacs-4e2622bf0d63c40f447d44e6401ea054ef55b261.tar.gz emacs-4e2622bf0d63c40f447d44e6401ea054ef55b261.zip | |
Fix rounding errors in <, =, etc.
* etc/NEWS: Document this.
* src/bytecode.c (exec_byte_code):
* src/data.c (arithcompare):
Do not lose information when comparing floats to integers.
* test/src/data-tests.el (data-tests-=, data-tests-<)
(data-tests->, data-tests-<=, data-tests->=):
Test this.
Diffstat (limited to 'src/bytecode.c')
| -rw-r--r-- | src/bytecode.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index 4414b077bb9..e781a87d16f 100644 --- a/src/bytecode.c +++ b/src/bytecode.c | |||
| @@ -992,18 +992,14 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, | |||
| 992 | CASE (Beqlsign): | 992 | CASE (Beqlsign): |
| 993 | { | 993 | { |
| 994 | Lisp_Object v2 = POP, v1 = TOP; | 994 | Lisp_Object v2 = POP, v1 = TOP; |
| 995 | CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v1); | ||
| 996 | CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v2); | ||
| 997 | bool equal; | ||
| 998 | if (FLOATP (v1) || FLOATP (v2)) | 995 | if (FLOATP (v1) || FLOATP (v2)) |
| 996 | TOP = arithcompare (v1, v2, ARITH_EQUAL); | ||
| 997 | else | ||
| 999 | { | 998 | { |
| 1000 | double f1 = FLOATP (v1) ? XFLOAT_DATA (v1) : XINT (v1); | 999 | CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v1); |
| 1001 | double f2 = FLOATP (v2) ? XFLOAT_DATA (v2) : XINT (v2); | 1000 | CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v2); |
| 1002 | equal = f1 == f2; | 1001 | TOP = EQ (v1, v2) ? Qt : Qnil; |
| 1003 | } | 1002 | } |
| 1004 | else | ||
| 1005 | equal = XINT (v1) == XINT (v2); | ||
| 1006 | TOP = equal ? Qt : Qnil; | ||
| 1007 | NEXT; | 1003 | NEXT; |
| 1008 | } | 1004 | } |
| 1009 | 1005 | ||