comp.lang.ada
 help / color / mirror / Atom feed
From: graham@clsi.COM (Paul Graham)
Subject: Types with physical dimension
Date: 27 Sep 1994 22:18:41 GMT
Date: 1994-09-27T22:18:41+00:00	[thread overview]
Message-ID: <GRAHAM.94Sep27181841@canopus.clsi.COM> (raw)


While Ada's strong typing mechanism can catch errors like this:

    d : dollars;
    f : francs;
...
    d := d + f;		-- error

it does allow such nonsensical constructs as

    d := d * d;		-- what does it mean to multiply dollars by dollars?
    d := d ** 10;	-- ??

VHDL provides physical types to model values with physical dimensions.  A
VHDL physical type lacks certain predefined multiplication operations, lacks
exponentiation, and its division operation returns a universal_integer (or
root_integer in Ada 9x terminolgy).  An example of physical types:

    type length is range integer'low to integer'high
        units inches;
            feet = 12 inches;
            yards = 3 feet;
        end units;

    type area is range integer'low to integer'high
        units inches_2;
            feet_2 = 144 inches_2;
            yards_2 = 9 feet_2;
        end units;

    function "*"(x, y : length) return area is
    begin
        return length'pos(x) * length'pos(y) * inches_2;
    end;

    function "/"(x : area; y : length) return length is
    begin
        return area'pos(x) / length'pos(y) * inches;
    end;

...
    variable L : length;
    variable A : area;
...
    L := L * 2;			-- legal
    L := L * L;			-- illegal
    A := L * L;			-- legal
    
    A := 2 inches * 2 inches;	-- legal (= 4 inches_2)

    L := 4 feet_2 / 2 inches;	-- legal (= 288 inches)

(Please excuse any typos; I haven't simulated this.)

One can model physical types in Ada by using private types, but this
involves writing a lot of operators.  What do Ada programmers do to guard
against dimensional errors?

Paul
--
Paul Graham 	graham@compass-da.com	Compass Design Automation, Inc.
(speaking only for myself)	"Cekoslovakyalilastiramadiklarimizdanmissiniz."



             reply	other threads:[~1994-09-27 22:18 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1994-09-27 22:18 Paul Graham [this message]
1994-09-28 13:59 ` Types with physical dimension Robert Dewar
1994-09-30  2:06   ` R_Tim_Coslet
1994-10-03 17:31 ` Stephen A. Leake
1994-10-04 11:51   ` Robert I. Eachus
1994-10-04 19:45     ` Mark A Biggar
     [not found]       ` <CxBBx8.7L@irvine.com>
1994-10-13 22:15         ` gamache
1994-10-12  3:43     ` Matt Kennel
1994-10-04 14:56   ` Robert Dewar
1994-10-05 14:53     ` Bob Gilbert
1994-10-05  8:38   ` Jean-Pierre Rosen
1994-10-05 10:35     ` Stephen J Bevan
1994-10-05 13:17       ` Jean-Pierre Rosen
1994-10-05 15:48     ` Norman H. Cohen
  -- strict thread matches above, loose matches on Subject: below --
1994-09-28 10:55 Simtel20 Transfer
1994-09-28 18:56 ` Mark A Biggar
1994-10-04  2:06 ` lmiller
     [not found] <GRAHAM.94Sep27181841@canopus.clsi.com>
1994-09-28 17:36 ` William Brennan
1994-09-28 21:41 ` Tucker Taft
1994-09-29  4:11   ` Robert Dewar
1994-09-29 11:19     ` Peter Hermann
1994-09-30 10:17       ` Dr John Stockton
1994-10-03  4:37       ` Robert Dewar
1994-09-29 13:37     ` Tucker Taft
1994-10-03  4:40       ` Robert Dewar
1994-09-28 19:28 Paul Pukite
replies disabled

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