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

Nick Roberts (Nick.Roberts@dial.pipex.com) wrote:

: 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. 

I believe I am right (see below).

: ... 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.

Sorry, but you are wrong.  Universal_fixed is *not* implicitly convertible
to root_real.  It is implicitly convertible to any *fixed point* type,
and to universal_real (because any real type is implicitly convertible
both *to* and *from* universal real), but *not* to root_real (I realize 
only a died-in-the-wool language lawyer will believe this reasoning).

: However, the expression Integer(D*10.0+0.5) causes a root_real addition and
: conversion to integer to be executed dynamically. 

No, this expression uses Duration's "+", because this is effectively
equivalent to:
   Integer(Duration(D*10.0)+Duration(0.5))

The whole fixed-point multiplication model is pretty obscure, unfortunately.

: ...
: -------------------------------------------
: Nick Roberts
: -------------------------------------------

--
-Tucker Taft   stt@averstar.com   http://www.averstar.com/~stt/
Technical Director, Distributed IT Solutions  (www.averstar.com/tools)
AverStar (formerly Intermetrics, Inc.)   Burlington, MA  USA




  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 ` Robert I. Eachus
1999-01-14  0:00 ` bob
1999-01-14  0:00 ` David C. Hoos, Sr.
1999-01-14  0:00 ` Tom Moran
1999-01-14  0:00 ` Tucker Taft
1999-01-15  0:00   ` robert_dewar
1999-01-28  0:00   ` Nick Roberts
1999-01-28  0:00     ` Tucker Taft [this message]
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                 ` 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                         ` David Botton
1999-02-05  0:00                         ` Tom Moran
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) dewar
1999-02-18  0:00                           ` David Botton
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-02-03  0:00                 ` Building a compiler (was: Fixed point multiplication ambiguity) dennison
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                 ` Tucker Taft
1999-02-03  0:00                 ` robert_dewar
1999-01-28  0:00     ` Fixed point multiplication ambiguity robert_dewar
1999-01-14  0:00 ` Matthew Heaney
replies disabled

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