comp.lang.ada
 help / color / mirror / Atom feed
From: Dirk Herrmann <fight_spam@invalid.invalid>
Subject: Re: conversions between fixed-point types
Date: Sun, 20 Sep 2009 20:55:50 +0200
Date: 2009-09-20T20:55:50+02:00	[thread overview]
Message-ID: <h95trn$54e$1@news.albasani.net> (raw)
In-Reply-To: <wccskehwv98.fsf@shell01.TheWorld.com>

Robert A Duff wrote:
> Dirk Herrmann <fight_spam@invalid.invalid> writes:
> 
>> In particular I am disturbed by the fact that the following two lines
>> produce different results with GNAT, as has been confirmed for GNAT
>> 3.15p (thanks, tmoran):
> 
> I don't know, but it might have something to do with the rules for
> evaluating static expressions.  See RM-4.9.  You also need to look at
> G.2.3.  I don't remember the exact rules for conversions of fixed
> point, but I think they do allow some implementation freedom.

Thanks Bob, I will look at those chapters.

> If you don't like that, then write code to make it do what
> you want.

As I said when I started this thread, I am currently investigating whether Ada 
could be a good replacement for the proprietary fixed-point oriented language 
used in our company.  And, convincing my colleagues would certainly not be 
easier with statements like "Ada can be used, but you have to implement all 
fixed-point stuff yourself".  Even more if you can not even rely on the fact 
that a compiler will behave the same way throughout.

> Or use compatible delta/small values.

Fortunately, most (but not all) of our fixed-point code uses powers of two for 
small.  But, even in that case you have to care about rounding when, for 
example, you are converting values from a small of 0.125 to a small of 0.5.

> By the way, you can say:
> 
>     for T'Small use T'Delta;
> 
> to avoid repeating yourself.

I have tried that, especially since the very same recommendation was given in 
the Barnes book "Ada 2005".  But, GNAT gives an error message.  It seems that 
the very moment you reference T'Delta the type T gets "frozen" such that  the 
"use" statement itself freezes T before it can modify it.  I don't know if 
this is what the authors of the reference manual had intended, but GNAT 
interprets it that way.

Thanks a lot for your help,
Dirk



  reply	other threads:[~2009-09-20 18:55 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-18 21:35 conversions between fixed-point types Dirk Herrmann
2009-09-18 22:42 ` Adam Beneschan
2009-09-19 12:41 ` Dirk Herrmann
2009-09-19 14:48   ` John B. Matthews
2009-09-20  8:15     ` Dirk Herrmann
2009-09-20 14:22       ` Robert A Duff
2009-09-20 18:55         ` Dirk Herrmann [this message]
2009-09-20 20:34           ` Simon Clubley
2009-09-23 20:46             ` Dirk Herrmann
2009-09-27 17:15               ` Simon Clubley
2009-09-27 19:22           ` sjw
2009-09-28 20:18             ` Dirk Herrmann
2009-09-28 18:37           ` Robert A Duff
2009-09-28 20:50             ` Dirk Herrmann
2009-09-20 15:18       ` John B. Matthews
2009-09-20 19:13         ` Dirk Herrmann
2009-09-20 20:09       ` tmoran
2009-09-21 17:24       ` Jeffrey R. Carter
2009-09-23 20:57         ` Dirk Herrmann
2009-09-23 22:28           ` Jeffrey R. Carter
2009-09-24  1:05             ` Adam Beneschan
2009-09-24  3:57               ` Jeffrey R. Carter
2009-09-25  8:47               ` Stuart
2009-09-25 20:41                 ` sjw
2009-09-25 21:58                   ` Jeffrey R. Carter
2009-09-28 13:40                   ` Stuart
2009-09-26 14:43                 ` Dirk Herrmann
2009-09-28 15:15                   ` Adam Beneschan
2009-09-26 14:31               ` Dirk Herrmann
2009-09-19 18:38   ` tmoran
2009-09-20  8:22 ` sjw
replies disabled

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