comp.lang.ada
 help / color / mirror / Atom feed
From: anon@anon.org (anon)
Subject: Re: Duration'Image, Duration'Value and Duration'Last
Date: Thu, 19 Feb 2009 17:00:16 GMT
Date: 2009-02-19T17:00:16+00:00	[thread overview]
Message-ID: <Aegnl.386903$Mh5.307388@bgtnsc04-news.ops.worldnet.att.net> (raw)
In-Reply-To: 3d28adba-fdc7-43e1-b25e-e986276d7897@k36g2000pri.googlegroups.com

Its actually a compiler bug.  Even using a user created type that contains the 
Duration range, will cause the same type of error.

   type myDuration is delta 0.000000001
    range -((2 ** 63 - 1) * 0.000000001) ..
           +((2 ** 63 - 1) * 0.000000001);
   for myDuration'Small use 0.000000001;

But if you manual use the "System.Val_Real" package which is the work 
horse for Duration'Value attrubute it does work correctly. 

In <3d28adba-fdc7-43e1-b25e-e986276d7897@k36g2000pri.googlegroups.com>, Adam Beneschan <adam@irvine.com> writes:
>On Feb 19, 7:33 am, dhenry <tfc.d...@gmail.com> wrote:
>> Hello,
>>
>> I'm experimenting something strange when manipulating Duration'Image,
>> Duration'Value and Duration'Last with GNAT :
>>
>> The result of Duration'Value(Duration'Image(Duration'Last)) is
>> different from the result of S : String := Duration'Image
>> (Duration'Last) and then Duration'Value(S).
>>
>> Here is a test program that shows the issue:
>>
>> -----------------------------------------------------
>> with Ada.Text_IO; use Ada.Text_IO;
>>
>> procedure Test is
>>    S : String   := Duration'Image (Duration'Last);
>>    D : Duration := Duration'Value (S);
>> begin
>>    Put_Line (Duration'Image (D));
>>    Put_Line (Duration'Image (Duration'Last));
>> end Test;
>> -----------------------------------------------------
>>
>> This test program gives me:
>> -9223372036.854775810
>>  9223372036.854775810
>>
>> Note that -9223372036.854775810 seems to be Duration'First...
>>
>> Is it expected? Can someone tell me what happens here? why this
>> difference?
>
>This is pretty obviously a GNAT bug.  From experimentation, it appears
>that the problem is in the Duration'Value; Duration'Value
>("9223372036.854775810") yields a negative value.  Fixed-point types
>are usually represented as integers with an implied binary point
>somewhere in there.  The integer whose leftmost bit is 1 and all other
>bits 0 is always tricky to deal with, because you can't negate it, so
>special care must be taken.  If Duration'First is represented as
>exactly this integer, it's understandable why this sort of error may
>have come up.
>
>                                 -- Adam
>
>




      reply	other threads:[~2009-02-19 17:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-19 15:33 Duration'Image, Duration'Value and Duration'Last dhenry
2009-02-19 15:44 ` Adam Beneschan
2009-02-19 17:00   ` anon [this message]
replies disabled

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