comp.lang.ada
 help / color / mirror / Atom feed
From: "Nick Roberts" <Nick.Roberts@dial.pipex.com>
Subject: Re: Fixed point multiplication ambiguity
Date: 1999/01/28
Date: 1999-01-28T00:00:00+00:00	[thread overview]
Message-ID: <78od6d$b4t$2@plug.news.pipex.net> (raw)
In-Reply-To: F5KMxx.3L8.0.-s@inmet.camb.inmet.com

Tucker Taft wrote in message ...
[...]
|: procedure Tf is
|
|:     D : Duration := 5.0;
|
|:     Dec_Delt : Integer := Integer (D * 10.0 + 0.5);
|
|This is legal.  Overload resolution interprets "D * 10.0" as returning
|universal_fixed.  This is implicitly convertible to Duration (as well
|as any other fixed point type), as is 0.5.  Presuming there is no
|other fixed-point type with a directly visible "+", this should resolve,
|and use the "+" of Duration.
[...]

Yes, this is legal, but Tucker's explanation is not precisely right. The
D*10.0 does resolve as Tucker says, giving a universal_fixed. The 0.5
literal is a universal_real. Thus adding them gives us the pattern
"+"(universal_fixed,universal_real) return unknown. However, it is the rule
in RM 8.6 [29,30] preferring root types that allows this to be resolved into
the pattern "+"(root_real,root_real) return root_real implied by RM 4.5.3
[2]. So the expression D*10.0+0.5 returns a value of type root_real, which
can then be converted to an integer and assigned to Dec_Delt.

However, the expression Integer(D*10.0+0.5) causes a root_real addition and
conversion to integer to be executed dynamically. It may be slightly more
efficient to use the expression Integer(D*10+0.5) instead, causing the
multiplication, addition, and conversion to all be carried out on the type
Duration. For some implementations, operations on the type Duration will
execute slightly faster than the same operations on the type root_real. On
the other hand, some implementations' optimisers will effectively make this
change automatically.

-------------------------------------------
Nick Roberts
-------------------------------------------







  parent reply	other threads:[~1999-01-28  0:00 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-01-14  0:00 Fixed point multiplication ambiguity Marc A. Criley
1999-01-14  0:00 ` Matthew Heaney
1999-01-14  0:00 ` Tucker Taft
1999-01-15  0:00   ` robert_dewar
1999-01-28  0:00   ` Nick Roberts [this message]
1999-01-28  0:00     ` robert_dewar
1999-01-28  0:00     ` Tucker Taft
1999-01-28  0:00       ` robert_dewar
1999-01-29  0:00       ` Nick Roberts
1999-01-29  0:00         ` Tucker Taft
1999-01-29  0:00           ` Nick Roberts
1999-01-29  0:00             ` Tucker Taft
1999-02-01  0:00               ` Robert I. Eachus
1999-02-02  0:00               ` Building a compiler (was: Fixed point multiplication ambiguity) Nick Roberts
1999-02-03  0:00                 ` dennison
1999-02-03  0:00                 ` Chris Morgan
1999-02-04  0:00                   ` robert_dewar
1999-02-04  0:00                     ` Garbage collection - was " news.oxy.com
1999-02-04  0:00                       ` robert_dewar
1999-02-05  0:00                         ` Tom Moran
1999-02-05  0:00                         ` David Botton
1999-02-18  0:00                         ` news.oxy.com
1999-02-18  0:00                           ` Garbage collection - was Re: Building a compiler Samuel Mize
1999-02-19  0:00                             ` Samuel Mize
1999-02-18  0:00                           ` Garbage collection - was Re: Building a compiler (was: Fixed point multiplication ambiguity) David Botton
1999-02-18  0:00                           ` dewar
1999-02-18  0:00                           ` AdaHag
1999-02-19  0:00                           ` Steven Hovater
1999-02-20  0:00                           ` A Modest Defense of ACT (though they are big boys and can take care of themselves) Steve Quinlan
1999-02-21  0:00                             ` dewar
1999-02-22  0:00                               ` Matthew Heaney
1999-02-21  0:00                                 ` bill
1999-02-22  0:00                                   ` Larry Kilgallen
1999-02-22  0:00                                 ` dennison
1999-02-22  0:00                             ` dennison
1999-02-24  0:00                               ` Steve Quinlan
1999-02-25  0:00                                 ` dennison
1999-02-26  0:00                                   ` Steve Quinlan
1999-02-26  0:00                                     ` dennison
1999-02-27  0:00                                       ` Simon Wright
1999-02-27  0:00                                         ` Dave Taylor
1999-02-28  0:00                                       ` dewar
1999-02-25  0:00                                 ` dewar
1999-02-25  0:00                                   ` Steve Quinlan
1999-02-25  0:00                                     ` robert_dewar
1999-02-05  0:00                     ` GC+HC for GNAT/GCC (was: Building a compiler) Nick Roberts
     [not found]                       ` <m33e4jvs1n.fsf@muc.de>
1999-02-06  0:00                         ` GC+FSD for GNAT/GCC Nick Roberts
1999-02-07  0:00                           ` robert_dewar
1999-02-05  0:00                   ` Building a compiler Nick Roberts
1999-02-05  0:00                     ` Tucker Taft
1999-02-06  0:00                       ` Nick Roberts
1999-01-30  0:00             ` Fixed point multiplication ambiguity robert_dewar
1999-02-02  0:00               ` Building a compiler (was: Fixed point multiplication ambiguity) Nick Roberts
1999-02-03  0:00                 ` robert_dewar
1999-02-03  0:00                 ` Tucker Taft
1999-01-14  0:00 ` Fixed point multiplication ambiguity Tom Moran
1999-01-14  0:00 ` bob
1999-01-14  0:00 ` David C. Hoos, Sr.
1999-01-14  0:00 ` Robert I. Eachus
replies disabled

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