From: "Charles R. Lyttle" <lyttlec@flash.net>
Subject: Re: floating point comparison
Date: 1997/08/03
Date: 1997-08-03T00:00:00+00:00 [thread overview]
Message-ID: <33E4CA33.2E09AA09@flash.net> (raw)
In-Reply-To: 01bca019$5218b9f0$e1e989cc@gort
Bob Binder wrote:
>
> Lynn Killingbeck <killbeck@phoenix.net> wrote in article
> <33E3ED97.4A56@phoenix.net>...
> > user wrote:
> > >
> > > Bob Binder wrote:
> > >
> > > > I haven't followed the IEEE fp standard, but I can't imagine how
> > > > (without resorting to some kind of BCD representation) any floating
> > > > point scheme using a non-decimal radix gets around the fundamental fact
> > > > that there are non-terminal fractions in this radix which are not
> > > > non-terminal in a decimal radix.
> > > >
> > > > Try this:
> > > >
> > > > x, y float;
> > > >
> > > > x = 1.0;
> > > > y = (x/10.0)*10.0;
> > > > if x == y {
> > > > // not likely }
> > > > else {
> > > > // more likely
> > > > };
> > > Although I am reading this in comp.lang.ada, the suggestion to try a
> > > simple example like this in C piqued my interest.
> > >
> > > On a Sun SPARC-5, with the built in compiler supplied by Sun, this
> > > code (fixed for syntax) found (x == y) to be true. Using 3.0 and
> > > 7.0 (neither of which have any chance of yielding an exact
> > > representation
> > > after the division) also found (x == y) to be true.
> > >
> > > The underlying machine arithmetic escapes me, but a simple mechanism
> > > such as retaining more precision in computation results, and rounding
> > > prior to comparison to some lesser degree of precision that still meets
> > > the spec, would work. Cheap calculators do this all the time, using
> > > something known as "guard digits," which retain precision that is not
> > > displayed in the (rounded) result.
> >
> > I did something like this a few years back, to show someone the problem
> > - and was very surprised when the results was equal, even though
> > (x/10.0) has no exact representation on a binary-based computer. Then I
> > looked at the generated code - and the COMPILER had optimised away all
> > the operations and just set x=y=1.0. There weren't any computations. I
> > think it was in someone's C (either Borland or Microsoft), but it's too
> > far back to remember the language/compiler details.
> >
> > Lynn Killingbeck
> >
>
> Interesting -- things have improved some from the stone age tools I used.
> I guess its a good thing that the simpler pitfalls are prevented --
> but you'd have to look at the generated code to see just what is
> done by a particular compiler. The mismatch still lurks. The only
> way to deal with is to apply know good numerical design technique
> with a clear understanding of the quirks and limitations of
> particular compiler. Ironically, as compilers become better, these
> quirks become more obscure, and can promote overconfidence.
>
> --
>
The moral is don't rely on the compiler, but on proper program design.
As soon as you lear the quirks of one compiler, a new release will be
adopted that has a new set of quirks. Ada has all the tools to do it
right. Anyone for writing "Numerical Recipes in Ada"? A good on-line GPL
package would be very valuable.
next prev parent reply other threads:[~1997-08-03 0:00 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
1997-07-29 0:00 floating point comparison Matthew Heaney
1997-07-30 0:00 ` Jan Galkowski
1997-07-31 0:00 ` Don Taylor
1997-07-31 0:00 ` Russ Lyttle
1997-08-01 0:00 ` W. Wesley Groleau x4923
1997-08-02 0:00 ` Robert Dewar
1997-08-02 0:00 ` Matthew Heaney
1997-08-03 0:00 ` Robert Dewar
1997-08-04 0:00 ` W. Wesley Groleau x4923
1997-08-05 0:00 ` Jan-Christoph Puchta
1997-08-05 0:00 ` W. Wesley Groleau x4923
1997-08-05 0:00 ` Samuel Mize
1997-08-06 0:00 ` Chris L. Kuszmaul
1997-08-07 0:00 ` Dave Sparks
1997-08-08 0:00 ` Robert Dewar
1997-08-08 0:00 ` Mark Eichin
1997-08-08 0:00 ` Jan-Christoph Puchta
1997-08-09 0:00 ` Robert Dewar
1997-08-10 0:00 ` Lynn Killingbeck
[not found] ` <5sbb90$qsc@redtail.cruzio.com>
[not found] ` <5scugs$jdc$1@cnn.nas.nasa.gov>
1997-08-07 0:00 ` Robert Dewar
1997-08-08 0:00 ` Gerhard Heinzel
1997-08-08 0:00 ` schlafly
1997-08-08 0:00 ` Daniel Villeneuve
1997-08-09 0:00 ` Robert Dewar
1997-08-09 0:00 ` David Ullrich
1997-08-10 0:00 ` Robert Dewar
1997-08-16 0:00 ` Andrew V. Nesterov
1997-08-18 0:00 ` Robert Dewar
1997-08-19 0:00 ` Hans Olsson
1997-08-19 0:00 ` Jim Carr
1997-08-21 0:00 ` Christian Bau
1997-08-21 0:00 ` Jim Carr
1997-08-21 0:00 ` Robert Dewar
1997-08-22 0:00 ` Jim Carr
1997-08-22 0:00 ` Robert Dewar
1997-08-23 0:00 ` Jim Carr
1997-08-24 0:00 ` Robert Dewar
1997-08-29 0:00 ` Andrew V. Nesterov
1997-08-29 0:00 ` Robert Dewar
[not found] ` <340DF1DD.2736@iop.com>
1997-09-07 0:00 ` Get_Immediate Robert Dewar
1997-09-07 0:00 ` Get_Immediate Robert Dewar
1997-09-08 0:00 ` Get_Immediate J Giffen
[not found] ` <5u4eq6$30b$1@news.lth.se>
1997-08-29 0:00 ` floating point comparison Robert Dewar
1997-09-01 0:00 ` Chris RL Morgan
1997-09-01 0:00 ` Jim Carr
[not found] ` <checkerEFx6xI.FCM@netcom.com>
1997-09-03 0:00 ` Chris L. Kuszmaul
1997-09-05 0:00 ` Malome Khomo
1997-09-07 0:00 ` Robert Dewar
1997-09-05 0:00 ` Robert Dewar
1997-09-10 0:00 ` Jim Carr
1997-09-12 0:00 ` Robert Dewar
1997-09-15 0:00 ` James Pauley
1997-09-16 0:00 ` Robert Dewar
1997-08-23 0:00 ` W. Wesley Groleau x4923
1997-08-23 0:00 ` Robert Dewar
1997-08-30 0:00 ` Paul Eggert
1997-08-06 0:00 ` Robert Dewar
1997-08-07 0:00 ` Shmuel (Seymour J.) Metz
1997-08-08 0:00 ` Peter Shenkin
1997-08-09 0:00 ` Albert Y.C. Lai
1997-08-06 0:00 ` Robert Dewar
[not found] ` <33E8E3E1.17EA@pseserv3.fw.hac.com>
[not found] ` <5sbgpk$q0n$1@goanna.cs.rmit.edu.au>
1997-08-07 0:00 ` Robert Dewar
[not found] ` <33FE4603.1B6B@pseserv3.fw.hac.com>
1997-08-23 0:00 ` Robert Dewar
1997-08-08 0:00 ` W. Wesley Groleau x4923
1997-08-06 0:00 ` Robert Dewar
[not found] ` <33E8DFF6.6F44@pseserv3.fw.hac.com>
1997-08-07 0:00 ` Robert Dewar
[not found] ` <33EA1251.3466@link.com>
[not found] ` <33EA46CC.226@pseserv3.fw.hac.com>
1997-08-08 0:00 ` Christian Bau
1997-08-12 0:00 ` Martin Tom Brown
1997-08-23 0:00 ` W. Wesley Groleau x4923
1997-08-23 0:00 ` Robert Dewar
1997-09-05 0:00 ` Robert I. Eachus
1997-09-06 0:00 ` schlafly
1997-09-09 0:00 ` Robert Dewar
1997-09-07 0:00 ` M. J. Saltzman
1997-09-11 0:00 ` Robin Rosenberg
1997-08-07 0:00 ` Dr. Rex A. Dwyer
1997-08-07 0:00 ` Do-While Jones
1997-08-03 0:00 ` Brian Rogoff
1997-08-03 0:00 ` Robert Dewar
1997-07-30 0:00 ` Robert Dewar
1997-07-30 0:00 ` Matthew Heaney
1997-07-31 0:00 ` Jim Carr
1997-07-30 0:00 ` Matthew Heaney
1997-07-31 0:00 ` Robert Dewar
1997-07-31 0:00 ` Martin Tom Brown
1997-07-31 0:00 ` Bob Binder (remove .mapson to email)
1997-07-31 0:00 ` Robert Dewar
1997-08-01 0:00 ` Dale Stanbrough
1997-08-04 0:00 ` Paul Eggert
1997-08-06 0:00 ` Robert Dewar
1997-08-14 0:00 ` Paul Eggert
1997-08-01 0:00 ` user
1997-08-02 0:00 ` Peter L. Montgomery
1997-08-04 0:00 ` W. Wesley Groleau x4923
1997-08-05 0:00 ` Bob Binder (remove .mapson to email)
1997-08-02 0:00 ` Lynn Killingbeck
1997-08-03 0:00 ` Robert Dewar
1997-08-03 0:00 ` Bob Binder (remove .mapson to email)
1997-08-03 0:00 ` Charles R. Lyttle [this message]
1997-07-31 0:00 ` Samuel Mize
1997-08-02 0:00 ` Lynn Killingbeck
1997-07-31 0:00 ` Gerald Kasner
1997-07-31 0:00 ` Robert Dewar
1997-08-02 0:00 ` Michael Sierchio
1997-08-08 0:00 ` floating point conversions Mark Lusti
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox