From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Float conversion
Date: Thu, 29 Jul 2010 17:35:05 +0200
Date: 2010-07-29T17:35:03+02:00 [thread overview]
Message-ID: <1d1txn4x3r5xn.1trm4gx9n87gm$.dlg@40tude.net> (raw)
In-Reply-To: 4c519968$0$6893$9b4e6d93@newsspool2.arcor-online.net
On Thu, 29 Jul 2010 17:08:24 +0200, Georg Bauhaus wrote:
> On 29.07.10 14:46, Dmitry A. Kazakov wrote:
>> On Thu, 29 Jul 2010 05:23:42 -0700 (PDT), Henrique wrote:
>>
>>> I have some problems in converting float variables in Ada. Look at the
>>> code below.
>>>
>>> Why var4 is not equal var1?
>>
>> Because they are not. Floating-point operations are inexact.
>
> Interestingly, a quick rewrite to C translated with gcc gives a different
> impression (of equality),
>
[...]
>
> $ ./a.out
> var3: 999.900024414062500=
> var4: 999.900085449218750=
with Ada.Text_IO; use Ada.Text_IO;
procedure Test is
type My_Float is digits 6;
CONVERSION_CONSTANT : constant My_Float := 6076.11;
CONVERSION_CONSTANT2 : constant My_Float := 1.0 / CONVERSION_CONSTANT;
var1: My_Float := 999.9;
var2: My_Float := var1 * CONVERSION_CONSTANT;
var3: My_Float:= var2 / CONVERSION_CONSTANT;
var4: My_Float := var2 * CONVERSION_CONSTANT2;
begin
Put_Line ("var1" & Long_Float'Image (Long_Float (Var1)));
Put_Line ("var4" & Long_Float'Image (Long_Float (Var4)));
end Test;
------------------------
var1 9.99900024414063E+02
var4 9.99900085449219E+02
When rounded to 6 decimal digits both are same. But the underlying base
binary type is longer than 6 digits.
P.S. It is always useful to think of floating point numbers as intervals
(which they are) rather than numbers.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2010-07-29 15:35 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-29 12:23 Float conversion Henrique
2010-07-29 12:44 ` Jacob Sparre Andersen
2010-07-29 12:46 ` Dmitry A. Kazakov
2010-07-29 15:08 ` Georg Bauhaus
2010-07-29 15:10 ` Georg Bauhaus
2010-07-29 15:35 ` Dmitry A. Kazakov [this message]
2010-07-29 18:21 ` Henrique
2010-07-29 19:08 ` Jeffrey R. Carter
2010-07-29 19:15 ` Dmitry A. Kazakov
2010-07-30 1:30 ` Phil Clayton
2010-07-30 8:43 ` Dmitry A. Kazakov
2010-07-30 13:14 ` Phil Clayton
2010-07-30 14:34 ` Dmitry A. Kazakov
2010-07-31 15:12 ` Stephen Leake
2010-08-03 1:07 ` Phil Clayton
2010-08-03 3:31 ` Shark8
2010-08-03 10:38 ` Georg Bauhaus
2010-08-04 7:27 ` Stephen Leake
2010-08-04 16:15 ` Georg Bauhaus
2010-08-04 16:32 ` Phil Clayton
2010-08-04 7:26 ` Stephen Leake
2010-08-04 12:52 ` Robert A Duff
2010-08-04 14:32 ` Dmitry A. Kazakov
2010-08-04 19:36 ` Simon Wright
2010-08-04 19:46 ` Dmitry A. Kazakov
2010-08-04 20:29 ` Georg Bauhaus
2010-08-05 12:05 ` Stephen Leake
2010-08-07 5:54 ` Shark8
2010-08-07 8:56 ` Georg Bauhaus
2010-08-07 13:49 ` Shark8
2010-08-05 10:20 ` Phil Clayton
2010-07-30 13:16 ` Henrique
2010-07-29 15:37 ` Warren
2010-07-29 14:56 ` Georg Bauhaus
2010-07-29 17:56 ` Jeffrey R. Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox