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 10:15:49 +0200
Date: 2009-09-20T10:15:49+02:00	[thread overview]
Message-ID: <h94obl$c7h$1@news.albasani.net> (raw)
In-Reply-To: <nospam-3D5AA1.10481219092009@news.aioe.org>

Dirk Herrmann wrote:
>> And, while experimenting and trying out Adam Beneschan's solution for 
>> rounding (thanks for your answer, Alan) I got totally confused 
>> because of the following code (I am using GNAT 4.3.4 with the 
>> following command line options: gnatmake -f -gnatVa -gnata 
>> -gnatwadhl.o -save-temps conversion.adb):
> [...]
>> Is this confusing behaviour allowed?  I will submit a bug report if 
>> some expert confirms it is a GNAT bug.

John B. Matthews wrote:
> I'm no expert, and I had some trouble following the conversions in your 
> example.  [...]

Sorry, I should have given more details about why I am confused.

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):
       FIO.Put(Float(FpB(Float(-1.5)))); TIO.Put(" ");      --> -1.20000E+00
       FIO.Put(Float(MakeB(-1.5))); TIO.Put(" ");           --> -1.60000E+00
In the first line, the conversion to FpB is done from a Float value, which is 
a direct cast from -1.5.  In the second line, the conversion to FpB is also 
done from a Float value, but in this case -1.5 is passed as a Float argument 
to MakeB.  What I don't understand is, why it should make a difference whether 
I cast -1.5 to Float and then convert it to FpB compared to the situation 
where -1.5 is converted to a Float argument, which is then converted to FpB.

The same question arises for the following three lines:
       FIO.Put(Float(FpB(FpA(Float(-1.5))))); TIO.Put(" "); --> -1.20000E+00
       FIO.Put(Float(MakeBFromA(FpA(-1.5)))); TIO.Put(" "); --> -1.60000E+00
       FIO.Put(Float(MakeBViaA(-1.5))); TIO.Put(" ");       --> -1.60000E+00
Again, the difference lies in whether a sequence of casts is used compared to 
whether the very same value is passed as an argument.

Thanks for your help,

Dirk Herrmann
(email address gladly given on request)



  reply	other threads:[~2009-09-20  8:15 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 [this message]
2009-09-20 14:22       ` Robert A Duff
2009-09-20 18:55         ` Dirk Herrmann
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