comp.lang.ada
 help / color / mirror / Atom feed
From: "David C. Hoos" <david.c.hoos.sr@ada95.com>
To: "P Torle" <knutby@torle.com>
Cc: "comp.lang.ada@ada.eu.org" <comp.lang.ada@ada-france.org>
Subject: Re: Float precision - gnat vs objectada
Date: Wed, 1 Dec 2004 12:50:34 -0600
Date: 2004-12-01T12:50:34-06:00	[thread overview]
Message-ID: <mailman.162.1101927075.10401.comp.lang.ada@ada-france.org> (raw)
In-Reply-To: 1c8dc73c.0412010746.272b978@posting.google.com

Anything beyond 3.14159_26535_89793 is lost when storing
the value in the 64-bit floating point variable, because there is
room for only 53 bits of mantissa.

To generate more than 15 significant digits requires extending
the mantissa with binary zeroes, which of course are not
accurate.

Both compilers appear to have done a little of that -- gnat to
a reasonable extent, and ObjectAda to an unreasonable extent.

If your program had called for Aft = 14, or even 15, the
results would have been identical.  Note that the 16th digit
after the decimal point is wrong from _both_ compilers, compared
to the true value.  However to expect the 16th and subsequent
digits after the decimal point from _any_ compiler, given a 53-bit
mantissa is unreasonable.



----- Original Message ----- 
From: "P Torle" <knutby@torle.com>
Newsgroups: comp.lang.ada
To: <comp.lang.ada@ada-france.org>
Sent: Wednesday, December 01, 2004 9:46 AM
Subject: Float precision - gnat vs objectada


> I'm working on a Ada95/C project that shall run on both Linux and
> Windows.
> I have some problems getting the same float precision on both
> platforms.
> Example:
> -----------------------------
> subtype Real is Long_Float;
> pi : Real;
> 
> pi := 3.14159_26535_89793_23846_26433_83279_50288_41971_69399_37511;
> Real_Io.Put(pi, Aft => 25);
> -----------------------------
> 
> Results:
> Linux: 3.1415926535897931200000000E+00
> Win32: 3.1415926535897931159979634E+00
> 
> The thing is, the following float-precision definitions are equal on
> both Linux and Windows:
> 
> Real'Machine_Mantissa  : 53
> Real'Machine_Emin      : -1021
> Real'Machine_Emax      : 1024
> Real'Digits            : 15
> 
> So why the difference? 
> 
> The Windows code is built with ObjectAda/adacomp and Microsoft tools
> cl.exe/link.exe.
> The Linux code is built with gnat/gcc 3.4.2
> _______________________________________________
> comp.lang.ada mailing list
> comp.lang.ada@ada-france.org
> http://www.ada-france.org/mailman/listinfo/comp.lang.ada
> 



  reply	other threads:[~2004-12-01 18:50 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-12-01 15:46 Float precision - gnat vs objectada P Torle
2004-12-01 18:50 ` David C. Hoos [this message]
2004-12-01 19:03 ` Martin Krischik
2004-12-02  7:51   ` Jeffrey Carter
2004-12-02 10:10     ` Martin Krischik
2004-12-01 23:32 ` Mark Lorenzen
2004-12-02  8:32 ` Dmitry A. Kazakov
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox