comp.lang.ada
 help / color / mirror / Atom feed
From: "Markus Schöpflin" <no@spam.spam>
Subject: Re: Fixed point constants issue
Date: Mon, 27 Sep 2010 12:33:49 +0200
Date: 2010-09-27T12:33:49+02:00	[thread overview]
Message-ID: <i7prua$dee$1@speranza.aioe.org> (raw)
In-Reply-To: i7jfon$71u$1@tornado.tornevall.net

Am 25.09.2010 02:16, schrieb Jeffrey Carter:
> On 09/24/2010 03:42 PM, Vinzent Hoefler wrote:
>>
>> 3.5.9 says:
>>
>> Multiplication and division of fixed point values deliver results of a
>> fixed point type with
>> an arbitrarily fine accuracy [...] which is referred to [...] as
>> /universal_fixed/.
>
> Yes. But these are not fixed-point values. One is universal_integer and the
> other is universal_real. The question is whether "*" is the one defined for
> universal_real or for the fixed-point type. In the latter case, the
> universal_real value would be converted to the fixed-point type before
> calling "*".
>
> ARM83 4.10 says that static, universal expressions are evaluated exactly.
> The question seems to be whether the expression is universal. ARM83 4.4
> seems to be the place to look for that, but I'm not sure which it requires.

We have three different overloads for "*" to consider. One is

   universal_integer * universal_real -> universal_real [4.10]

The next is

   INTEGER * ALTITUDE -> ALTITUDE [4.5.5]

The third is

   ALTITUDE * ALTITUDE -> ALTITUDE [4.5.5]

I think the key to the answer is in ARM83 4.6: "Apart from the explicit 
type conversions, the only allowed form of type conversion is the implicit 
conversion of a value of the type universal_integer or universal_real into 
another numeric type. An implicit conversion of an operand of type 
universal_integer to another integer type, or of an operand of type 
universal_real to another real type, can only be applied if the operand is 
either a numeric literal, a named number, or an attribute; such an operand 
is called a convertible universal operand in this section. An implicit 
conversion of a convertible universal operand is applied if and only if the 
innermost complete context (see 8.7) determines a unique (numeric) target 
type for the implicit conversion, and there is no legal interpretation of 
this context without this conversion."

There is no conversion from universal_integer to ALTITUDE, therefore the 
third overload cannot be chosen.

The implicit conversion from universal_real to ALTITUDE is only done when 
the operand is either a numeric literal, a named number, or an attribute. 
This rules out the first overload.

Therefore we have only the second overload left which is chosen because of 
an implicit conversion from universal_integer to INTEGER and from 
universal_real to ALTITUDE.

And the different results we're seeing are due to [3.5.6] which, if I 
understand the text correctly, allows the result of the conversion from 
FEET_PER_METER to be either 0 or 0.5.

Can someone confirm this reasoning?

Markus



  reply	other threads:[~2010-09-27 10:33 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-13 17:27 Fixed point constants issue Vinzent Hoefler
2010-09-13 18:04 ` Dmitry A. Kazakov
2010-09-13 18:25   ` Vinzent Hoefler
2010-09-13 19:05     ` Niklas Holsti
2010-09-13 20:35       ` Vinzent Hoefler
2010-09-13 20:35       ` Jeffrey Carter
2010-09-13 21:06         ` Vinzent Hoefler
2010-09-14  5:39         ` Niklas Holsti
2010-09-24 14:43         ` Markus Schöpflin
2010-09-24 20:05           ` Vinzent Hoefler
2010-09-24 21:38           ` Jeffrey Carter
2010-09-24 22:42             ` Vinzent Hoefler
2010-09-25  0:16               ` Jeffrey Carter
2010-09-27 10:33                 ` Markus Schöpflin [this message]
2010-09-27 18:57                   ` Jeffrey Carter
2010-09-28  8:16                     ` Markus Schöpflin
2010-09-28 17:28                       ` Jeffrey Carter
2010-10-05  6:27                         ` Randy Brukardt
2010-10-05 18:40                           ` Jeffrey Carter
2010-09-27 17:58             ` Adam Beneschan
2010-09-13 20:32     ` Dmitry A. Kazakov
2010-09-13 21:08       ` Vinzent Hoefler
2010-09-14  6:54         ` J-P. Rosen
2010-09-14 18:28           ` Vinzent Hoefler
2010-09-14  7:47         ` Dmitry A. Kazakov
2010-09-14 17:42           ` Vinzent Hoefler
2010-09-15  8:35             ` Dmitry A. Kazakov
2010-09-15 17:24               ` Vinzent Hoefler
2010-09-15 20:11                 ` Dmitry A. Kazakov
2010-09-14 19:44   ` Keith Thompson
replies disabled

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