comp.lang.ada
 help / color / mirror / Atom feed
From: Samuel Mize <smize@link.com>
Subject: Re: floating point comparison
Date: 1997/08/05
Date: 1997-08-05T00:00:00+00:00	[thread overview]
Message-ID: <33E7AE94.32F0@link.com> (raw)
In-Reply-To: 33E74A62.53E2@pseserv3.fw.hac.com


W. Wesley Groleau x4923 wrote:
> What I'm trying to say is that it should be possible to come up with a
> few simple guidelines that cover most cases, and a guideline for
> identifying the cases that require a mathematician--excuse me, a
> numerical analyst.

Well, I'll take a WAG at it.  Let's see how quickly it gets shredded.
It's based on fairly cold memory, and it may miss important points.

***** DRAFT -- POSTED FOR COMMENT ONLY -- DO NOT USE *****

This estimation tells you if you are very safe using floating point.
If not, you need to use numerical analysis to determine the actual
characteristics of your data.

First, let's distinguish between accuracy and precision.  Accuracy
defines how close to the right number you are; precision defines how
finely you distinguish between numbers.  For instance, if we estimate
pi as 854.83049859234875034629348, this is very precise, but wildly
inaccurate.  You cannot be more accurate than you are precise.

Typically you are computing a result from some inputs.  First you
must determine how accurate your inputs are.  Express this as the
largest possible error for each input (its "error margin").

Each computation reduces the accuracy of its result.  If your
result's error margin is well below the accuracy you need for
your answer, you can use floating point.

ADDITION/SUBTRACTION: The error margin of the result is the largest
of the two input error margins.  If the smaller input error is
above 1% of the larger, assume that the larger error margin doubles.

MULTIPLICATION/DIVISION: The result error margin is the sum of the
two input error margins.

Thus, given the accuracies shown in the declarations below:
  declare
    A: float; -- error is 0.01
    B: float; -- error is 0.001
    C: float; -- error is 0.000001
  begin
    X := A + B; -- error is 0.02 (double, smaller margin within 1%)
    Y := X + A; -- error is 0.04
    Z := Y + C; -- error stays 0.04, C does almost nothing to result

    X := Z * B; -- error is 0.041
    Y := X * A; -- error is 0.051

SPECIAL WARNINGS: Don't depend on results from a computation where
one input value is about as big, or smaller than, the other input's
error margin.  Repeated computations that don't appear to affect the
error margin eventually will.  Assume that a loop will execute the
greatest possible number of times.

If you need to compare two numbers and see if they are "about" the
same, test whether their difference is less than the sum of their
error margins.  (If this doesn't give you close enough results,
your inputs aren't accurate enough to support that calculation.)

If you can't define an absolute error bound for an input, this
estimation can't help you.  You need to read up on numerical
analysis.  For instance, if your input is correct to five digits,
but it ranges from 0.0001 to 1000000, this estimation has to assume
that the input's error margin is 10.0 (the error of the largest
value). This is not likely to be helpful if it is meaningful to
measure down to 0.0001 with five-digit precision.

Sam Mize






  reply	other threads:[~1997-08-05  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 [this message]
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                 ` Chris L. Kuszmaul
1997-08-07  0:00                   ` Dave Sparks
1997-08-08  0:00                     ` Robert Dewar
1997-08-08  0:00                     ` Jan-Christoph Puchta
1997-08-09  0:00                       ` Robert Dewar
1997-08-10  0:00                       ` Lynn Killingbeck
1997-08-08  0:00                     ` Mark Eichin
     [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                       ` Daniel Villeneuve
1997-08-08  0:00                       ` schlafly
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                                 ` 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
     [not found]                                                 ` <5u4eq6$30b$1@news.lth.se>
1997-08-29  0:00                                                   ` Robert Dewar
1997-09-01  0:00                                                     ` Chris RL Morgan
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
1997-09-01  0:00                                                 ` floating point comparison 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-19  0:00                                 ` Hans Olsson
1997-08-30  0:00                                 ` Paul Eggert
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
1997-08-07  0:00               ` Dr. Rex A. Dwyer
     [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             ` 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     ` 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         ` Lynn Killingbeck
1997-08-03  0:00           ` Bob Binder  (remove .mapson to email)
1997-08-03  0:00             ` Charles R. Lyttle
1997-08-03  0:00           ` Robert Dewar
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-07-31  0:00     ` Samuel Mize
1997-08-02  0:00     ` Lynn Killingbeck
1997-07-30  0:00   ` Matthew Heaney
1997-07-31  0:00     ` Jim Carr
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