From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, MAILING_LIST_MULTI autolearn=unavailable autolearn_force=no version=3.4.4 X-Google-Thread: 103376,91965a012526b259 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news1.google.com!proxad.net!freenix!enst.fr!melchior!cuivre.fr.eu.org!melchior.frmug.org!not-for-mail From: Marius Amado Alves Newsgroups: comp.lang.ada Subject: Re: Float to String Date: Wed, 10 Nov 2004 18:02:44 +0000 Organization: Cuivre, Argent, Or Message-ID: References: <419241CE.7020205@mailinator.com> NNTP-Posting-Host: lovelace.ada-france.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Trace: melchior.cuivre.fr.eu.org 1100109775 29787 212.85.156.195 (10 Nov 2004 18:02:55 GMT) X-Complaints-To: usenet@melchior.cuivre.fr.eu.org NNTP-Posting-Date: Wed, 10 Nov 2004 18:02:55 +0000 (UTC) To: comp.lang.ada@ada-france.org Return-Path: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax) X-Accept-Language: en-us, en In-Reply-To: X-OriginalArrivalTime: 10 Nov 2004 18:02:18.0882 (UTC) FILETIME=[6B3E8620:01C4C74F] X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ada-france.org X-BeenThere: comp.lang.ada@ada-france.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Gateway to the comp.lang.ada Usenet newsgroup" List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Xref: g2news1.google.com comp.lang.ada:6124 Date: 2004-11-10T18:02:44+00:00 >>Float'Image (Float_Value) >>and >>Float'Value (String_Holding_The_Previous) > > That's the problem, you loose quite a bit of precision with these convertions. I just came across an example: I have 64 bits available, so I define a 15 digits float type Float_64 is digits 15 range -16#0.FFFF_FFFF_FFFF_F8#E+256 .. 16#0.FFFF_FFFF_FFFF_F8#E+256; for Float_64'Size use 64; Now I want to know the range in decimal (because the users will be inputing in decimal). I use 'Image on 'First and 'Last: First :-1.79769313486232E+308 Last : 1.79769313486232E+308 Now I rewrite the type definition to make it selfdocumenting: type Float_64 is digits 15 range -1.79769313486232E+308 .. 1.79769313486232E+308; for Float_64'Size use 64; But now GNAT complaints that the size is too small, minimum allowed is 96! Decrementing the last digit range -1.79769313486231E+308 .. 1.79769313486231E+308; makes it pass. The culprit is probably the fact that approximations are in the direction away from zero. And GNAT says 96 bits (and not 65) probably because of alignment requirements. Anyway, just an illustration of how reconversions between systems (hexa and decimal) can be disruptive.