comp.lang.ada
 help / color / mirror / Atom feed
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



  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