comp.lang.ada
 help / color / mirror / Atom feed
From: "Nick Roberts" <nickroberts@adaos.worldonline.co.uk>
Subject: Re: Dimensionality Checking (Ada 20XX)
Date: Thu, 13 Dec 2001 19:52:03 -0000
Date: 2001-12-13T19:52:03+00:00	[thread overview]
Message-ID: <9vb860$e8rbj$1@ID-25716.news.dfncis.de> (raw)
In-Reply-To: upu5kjzgq.fsf@gsfc.nasa.gov

"Stephen Leake" <stephen.a.leake.1@gsfc.nasa.gov> wrote in message
news:upu5kjzgq.fsf@gsfc.nasa.gov...

> Well, V is _not_ a vector of "angles", it is a vector of "Cartesian
> positions". I guess you should do:
>
> V := F (...);
> M := Cartesian_Position (V);
>
> Where Cartesian_Position does some scaling.
>
> But I repeat, I see no advantage here. I can easily and efficiently
> define F to return a vector of meters.

Hah! That's a comment that O will touch upon further down.

> > I'm not arguing about that. It would be nice to provide the facility for
> > floating point numbers, I don't deny it. I just think it would be hard,
> > that's all. But if it's needed, then it's needed.
>
> Huh? Why would it be harder for float than fixed?

I've mulled this one over. This issue has a lot of subtleties. I think the
basic answer is that floating point types could also have units. However,
questions remain in my mind as to the actual usage of such types.

I won't go through the whole thing in laborious detail here, but the essence
is that unit-specific floating point types may need (or tend to make use of)
the ability to specify and check units dynamically. E.g.:

   ...
   Read(Datafile,Scaling);
   declare
      Length_Unit: constant Unit_Type := (Length_Dim,Scaling);
      type Length is digits 5 unit Length_Unit;
   begin
      while not End_of_File(Datafile) loop
         Read(Datafile,V.X);
         Read(Datafile,V.Y);
         Read(Datafile,V.Z);
         ...

The point of this example is that the scaling factor of the unit to be used
for the floating point type Length is read in (dynamically) from the front
of a data file, enabling the units of the data in the file to be chosen
(feet, meters, whatever). This is acceptable, because the type (being
floating point) has relative error. The dimensions, Length_Dim, are still
static, but the unit, Length_Unit, is not. Would compilers still be able to
perform the dimension checking at compile-time? It is this sort of question
that complicates the issue a bit.

> > Many (most?) of the required inter-type operations will be provided as
> > predefined operations. This in itself is not a big change, since Ada 95
> > already provides it!
>
> Um, no. In Ada 95, I can do:
>
> type Meters is digits ...;
> type Seconds is digits ...;
> type Meters_Per_Second is digits ...;
>
> Ada 95 does _not_ define the following, which is needed:
>
> function "/" (Left : in Meters; Right in Seconds) return
> Meters_Per_Second;

It does if you use fixed point instead of floating point types. This was one
of the reasons why I felt it would be harder to add units to floating point
types.

> If X is to be passed to a transcendental function, yes, it must be
> dimensionless. But that's _not_ what I'm doing with X! I am _defining_
> the position of the end of a robot arm to be V == (x, y, z). By
> _definition_, x, y, and z are in meters. As such, it is _meaningless_
> to pass x to a transcendental function. That's fine; the mathematical
> meaninglessness simply reflects a physical meaninglessness. There is
> no meaninful physical operation that corresponds to Sin (meters).

So why did you give it as an example?

>
> --
> -- Stephe

--
Best wishes,
Nick Roberts






  reply	other threads:[~2001-12-13 19:52 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-12-07  0:09 Dimensionality Checking (Ada 20XX) Snodgrass, Britt (NM75)
2001-12-07 16:15 ` Ian
2001-12-09 17:58   ` Nick Roberts
2001-12-09 22:58     ` Nick Roberts
2001-12-10  0:17     ` Mark Lundquist
2001-12-10  1:51       ` James Rogers
2001-12-10  3:33         ` Nick Roberts
2001-12-10 19:09           ` Nick Roberts
2001-12-11  8:20             ` Thomas Koenig
2001-12-11 15:37               ` Nick Roberts
2001-12-11 20:18                 ` Thomas Koenig
2001-12-12  0:58                   ` Mark Lundquist
2001-12-12  8:19                     ` Wilhelm Spickermann
2001-12-12 14:21                     ` Stephen Leake
2001-12-12 19:10                       ` Nick Roberts
2001-12-13 19:04                         ` Stephen Leake
2001-12-13 22:56                           ` Nick Roberts
2001-12-14  0:11                             ` Nick Roberts
2001-12-14 22:14                       ` Mark Lundquist
2001-12-15  1:30                         ` Nick Roberts
2001-12-10 20:22         ` Thomas Koenig
2001-12-10 17:21       ` Wes Groleau
2001-12-10 19:51         ` Mark Lundquist
2001-12-10 19:56           ` Wes Groleau
2001-12-10 20:37             ` Mark Lundquist
2001-12-10 18:56       ` Nick Roberts
2001-12-11 15:05         ` Wes Groleau
2001-12-11 16:39         ` Stephen Leake
2001-12-11 19:05           ` Nick Roberts
2001-12-11 22:50             ` Mark Johnson
2001-12-12  1:59               ` Nick Roberts
2001-12-11 23:01             ` Stephen Leake
2001-12-12  2:21               ` Nick Roberts
2001-12-12 14:16                 ` Stephen Leake
2001-12-13 19:52                   ` Nick Roberts [this message]
2001-12-13 22:22                     ` Nick Roberts
2001-12-14  6:40                       ` Robert C. Leif, Ph.D.
2001-12-14 17:30                       ` Stephen Leake
2001-12-14 17:38                     ` Stephen Leake
2001-12-11 22:45           ` Mark Lundquist
2001-12-12  1:42             ` Nick Roberts
2001-12-12 15:17               ` Mark Lundquist
2001-12-12 14:03             ` Stephen Leake
2001-12-12  9:35           ` Dmitry A. Kazakov
2001-12-12 14:26             ` Stephen Leake
2001-12-13 17:02               ` daniele andreatta
2001-12-13 19:06                 ` Stephen Leake
2001-12-14 10:16                 ` Dmitry A. Kazakov
2001-12-14 22:01                   ` Nick Roberts
2001-12-17 11:10                     ` Dmitry A. Kazakov
2001-12-17 12:16                       ` Thomas Koenig
2001-12-17 14:30                         ` Dmitry A. Kazakov
2001-12-27 17:18                         ` Steven Deller
2001-12-15  7:07                   ` Steven Deller
2001-12-17 12:31                     ` Dmitry A. Kazakov
2001-12-17 13:46                       ` Thomas Koenig
2001-12-17 15:00                         ` Dmitry A. Kazakov
2001-12-17 16:38                         ` Thomas Koenig
2001-12-17 21:07                       ` Britt Snodgrass
2001-12-20 13:44                         ` Dmitry A. Kazakov
2001-12-13 19:33         ` Mark Lundquist
2001-12-13 22:15           ` Nick Roberts
2001-12-14 20:20             ` Mark Lundquist
2001-12-10 23:31       ` Mark Lundquist
2001-12-10 13:57     ` Ian
2001-12-10 17:24       ` Wes Groleau
2001-12-10 20:38       ` Britt Snodgrass
  -- strict thread matches above, loose matches on Subject: below --
2001-12-11 13:11 Mike Brenner
2001-12-11 17:03 ` Mark Lundquist
2001-12-02 16:01 Another Idea for Ada 20XX James Rogers
2001-12-03 14:56 ` Mark Lundquist
2001-12-03 15:12   ` Lutz Donnerhacke
2001-12-03 21:13     ` Dimensionality Checking (Ada 20XX) Nick Roberts
2001-12-04 14:00       ` Dmitry A. Kazakov
2001-12-06 19:52         ` Britt Snodgrass
2001-12-06 20:55           ` Mark Lundquist
2001-12-06 22:38           ` Wes Groleau
2001-12-06 23:12             ` Mark Lundquist
2001-12-07 14:36               ` Wes Groleau
2001-12-07  9:37           ` Dmitry A. Kazakov
2001-12-07 22:51           ` Mark Lundquist
replies disabled

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