comp.lang.ada
 help / color / mirror / Atom feed
From: "David C. Hoos" <david.c.hoos.sr@ada95.com>
To: "Pascal Obry" <pascal@obry.net>
Cc: "comp.lang.ada@ada.eu.org" <comp.lang.ada@ada-france.org>
Subject: Re: Float to String
Date: Mon, 8 Nov 2004 14:13:54 -0600
Date: 2004-11-08T14:13:54-06:00	[thread overview]
Message-ID: <mailman.84.1099944885.10401.comp.lang.ada@ada-france.org> (raw)
In-Reply-To: uekj4l18j.fsf@obry.net

This is closely-related to a problem I encountered something over
ten years ago.

The problem in that case was that values stored in an Oracle database
when later extracted sometimes differed in the lsb.

What makes the problem similar is that Oracle required the data to be
stored in decimal format.  The problem with that is that decimal numbers
are not, in general, exactly represent in binary.  E.g. the decimal
number 0.1 is a non-terminating binary number.

The good news is that since binary numbers in a machine per force have
a finite length, they can all be exactly represent as decimal numbers.
The bad news about this is that the Text_IO.Float_IO package
implementations I have seen are not capable of outputting those exact
representations, and we, therefore, were obliged to implement our
own, in order to satisfy the requirements of our customer to have
equivalence down to the last bit.

For binary numbers having n bits following the binary point, n digits
are required following the decimal point to exactly represent the
fractional part of the value. Such exact representations will always
terminate with the digit "5."

For binary numbers having n bits preceding the binary point, the
number of decimal digits required to exactly represent the whole-
number part of the value is (n log2 (10)) + 1.

I hope this helps.

----- Original Message ----- 
From: "Pascal Obry" <pascal@obry.net>
Newsgroups: comp.lang.ada
To: <comp.lang.ada@ada-france.org>
Sent: Monday, November 08, 2004 11:06 AM
Subject: Float to String


>
> I was wondering if there is a way to save a float into a string and read
it
> back without loosing precision ?
>
> I tried something like:
>
>    F_Str : String (1 .. Float'Base'Digits);
>
>    Float_Text_IO.Put (F_Str, My_Float, Aft => Float'Base'Digits);
>
> But this is not enough... Ideas ?
>
> Thanks,
> Pascal.
>
> -- 
>
> --|------------------------------------------------------
> --| Pascal Obry                           Team-Ada Member
> --| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
> --|------------------------------------------------------
> --|              http://www.obry.org
> --| "The best way to travel is by means of imagination"
> --|
> --| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595
> _______________________________________________
> comp.lang.ada mailing list
> comp.lang.ada@ada-france.org
> http://www.ada-france.org/mailman/listinfo/comp.lang.ada
>




  parent reply	other threads:[~2004-11-08 20:13 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-11-08 17:06 Float to String Pascal Obry
2004-11-08 18:29 ` Jean-Pierre Rosen
2004-11-08 19:03 ` Jeffrey Carter
2004-11-08 20:13 ` David C. Hoos [this message]
2004-11-08 20:18 ` David C. Hoos
2004-11-09  0:40   ` John B. Matthews
2004-11-09  5:24     ` David C. Hoos, Sr.
2004-11-08 21:29 ` Nick Roberts
2004-11-09 17:58   ` Peter Hermann
2004-11-10  9:38     ` Peter Hermann
2004-11-10 12:12       ` Larry Kilgallen
2004-11-09  8:39 ` Dmitry A. Kazakov
2004-11-09 18:17   ` Pascal Obry
2004-11-10  8:53     ` Dmitry A. Kazakov
2004-11-10 11:15       ` Samuel Tardieu
2004-11-10 14:35         ` Dmitry A. Kazakov
2004-11-10 15:00         ` Peter Hermann
2004-11-10 15:35         ` Marius Amado Alves
2004-11-10 16:35           ` Dmitry A. Kazakov
2004-11-10 17:28             ` Marius Amado Alves
2004-11-11 15:25               ` Dmitry A. Kazakov
2004-11-11 16:40                 ` Marius Amado Alves
2004-11-11 18:31                   ` Dmitry A. Kazakov
2004-11-11 22:27                     ` Marius Amado Alves
2004-11-12 12:19                       ` Dmitry A. Kazakov
2004-11-12 14:55                         ` Marius Amado Alves
2004-11-10  5:05 ` Steve
2004-11-10 15:37   ` Pascal Obry
2004-11-10 16:29     ` Alex R. Mosteo
2004-11-10 16:48       ` Pascal Obry
2004-11-10 18:02         ` Marius Amado Alves
2004-11-10 19:40           ` Jeffrey Carter
2004-11-10 21:04             ` Marius Amado Alves
2004-11-11  3:33     ` Steve
2004-11-11  7:51       ` tmoran
2004-11-11 12:32         ` Pascal Obry
2004-11-11 15:53           ` David C. Hoos, Sr.
2004-11-11 16:17             ` Pascal Obry
2004-11-11 17:36             ` Jeffrey Carter
2004-11-12  0:01               ` David C. Hoos, Sr.
2004-11-12  0:30                 ` Jeffrey Carter
2004-11-11 12:30       ` Pascal Obry
2004-11-13 16:37 ` Ginduskina
2004-11-13 18:41   ` Björn Lundin
2004-11-13 16:39 ` Ginduskina
2004-11-13 16:49   ` Simon Wright
2004-11-13 16:53   ` David C. Hoos, Sr.
2004-11-13 16:55   ` Pascal Obry
replies disabled

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