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
>
>
prev parent 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