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