unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#1334: 23.0.60; bug of bytecomp arithmetic operations
@ 2008-11-14 23:10 Chong Yidong
  2008-11-15  4:04 ` Shigeru Fukaya
  0 siblings, 1 reply; 8+ messages in thread
From: Chong Yidong @ 2008-11-14 23:10 UTC (permalink / raw)
  To: Shigeru Fukaya; +Cc: 1334

Hi Shigeru,

I've been looking through your changes to byte-opt.el.  They look good,
but some of the changes are a little too agressive for my tastes, so
close to pretest.

Could you separate out the byte-optimize-*-functions part of the patch?
A mistake in any of these lists could lead to some hard-to-track errors.
If in doubt, let's simply not perform the optimization for now.  We can
apply these changes after the release.






^ permalink raw reply	[flat|nested] 8+ messages in thread
* bug#1334: 23.0.60; bug of bytecomp arithmetic operations
@ 2008-11-14 18:11 Chong Yidong
  0 siblings, 0 replies; 8+ messages in thread
From: Chong Yidong @ 2008-11-14 18:11 UTC (permalink / raw)
  To: Shigeru Fukaya; +Cc: 1334

> Hello,
>
> Current byte compiler has potential problems in arithmetic operations.
> Examples are all on Intel 32-bit. Result may occur in other
> environments.

Good work catching these problems.  I've committed your bytecomp.el
changes into CVS.  I'm double-checking your changes to byte-opt.el, and
will commit them in later if no problems occur.






^ permalink raw reply	[flat|nested] 8+ messages in thread
* bug#1334: 23.0.60; bug of bytecomp arithmetic operations
@ 2008-11-12 14:58 Shigeru Fukaya
  0 siblings, 0 replies; 8+ messages in thread
From: Shigeru Fukaya @ 2008-11-12 14:58 UTC (permalink / raw)
  To: bug-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 2259 bytes --]

Hello,

Current byte compiler has potential problems in arithmetic operations.
Examples are all on Intel 32-bit. Result may occur in other
environments.

1. Operations are all compiled to binary operations. It may cause
overflows or truncations in floating point data operations.

   Examples.
      (upper result is by interpreter, lower is by code after compile)

    (let ((a most-positive-fixnum) (b 1) (c 1.0))  (+ a b c))
         --> 268435457.0
         --> -268435455.0

    (let ((a most-positive-fixnum) (b -2) (c 1.0)) (- a b c))
         --> 268435456.0
         --> -268435456.0

    (let ((a most-positive-fixnum) (b 2) (c 1.0))  (* a b c))
         --> 536870910.0
         --> -2.0

    (let ((a 3) (b 2) (c 1.0)) (/ a b c))
         --> 1.5
         --> 1.0


2. Most integer constants are moved to the end of expressions and
pre-calculated at compile time. Changing of order may cause different
result from original expressions.
(In other words, `byte-optimize-delay-constants-math' should not be called)

   Examples.

      (let ((a (+ 1 (expt 2 -52))) (b (expt 2 -53))) (+ a -1 b))
         --> 3.3306690738754696e-016
         --> 4.440892098500626e-016

      (let ((a (expt 2 -1074)) (b 0.25)) (* a 4 b))
         --> 5e-324
         --> 0.0


3. Mulitiplication/Division optimization sometimes don't consider
floating point operators.

   Examples.

      (let ((a 1.0)) (* a 0))
         --> 0.0
         --> 0

      (let ((a 1.0)) (* a 2.0 0))
         --> 0.0
         --> 0

      (let ((a 1.0)) (/ 0 a))
         --> 0.0
         --> 0

      (let ((a 1.0)) (/ 3 a 2))
         --> 1.5
         --> 1.0


4. In division, optimizing -1 twice and cause erroneous results.

   Examples.

      (/ 3 -1)
         --> -3
         --> 3


Attached files are rewrittren version and too much changed, so it is
possibly just for references (At least, alias functions are not
treated well, and not comprehensively tested).

   bytecomp-patch.el -- contain only new and modified symbols/functions.
   byte-opt-test.el  -- test function that shows interpreter/original/revised
                        results.
   test.log          -- test result using above files.
   byte-opt.el bytecomp.el -- changed files to replace.

Regards,
Shigeru

[-- Attachment #2: bc.tgz --]
[-- Type: application/x-gzip, Size: 75456 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2008-11-21  9:11 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-14 23:10 bug#1334: 23.0.60; bug of bytecomp arithmetic operations Chong Yidong
2008-11-15  4:04 ` Shigeru Fukaya
2008-11-15  4:18   ` Chong Yidong
2008-11-19 12:27     ` Shigeru Fukaya
2008-11-21  7:40       ` Chong Yidong
2008-11-21  9:11         ` Shigeru Fukaya
  -- strict thread matches above, loose matches on Subject: below --
2008-11-14 18:11 Chong Yidong
2008-11-12 14:58 Shigeru Fukaya

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).