comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen.a.leake.1@gsfc.nasa.gov>
Subject: Re: Dimensionality Checking (Ada 20XX)
Date: 13 Dec 2001 14:04:23 -0500
Date: 2001-12-13T19:07:38+00:00	[thread overview]
Message-ID: <u4rmv6ix4.fsf@gsfc.nasa.gov> (raw)
In-Reply-To: 9v8gp9$dbhjr$1@ID-25716.news.dfncis.de

"Nick Roberts" <nickroberts@adaos.worldonline.co.uk> writes:

> In an effort to get back to Ada a bit ;-) I'll describe what I see logs and
> exponentiations of units meaning, and how I see them working.

Ok!

> In my view of the proposed scheme, a 'unit' has two essential
> attributes: a dimensionality; a scaling factor.
> 
> A 'dimensionality' is a factor (a real number) for each of a set of
> dimensions.

Hmm. In physics, dimensionality is an integer. 

> For a certain dimensionality, a 'scaling factor' is the factor (also
> a real number) by which a value in the unit must be multiplied to
> convert it to some (actual or notional) canonical unit for that
> dimensionality.

Ok.

> Supposing our set of dimensions is {Mass, Length, Time}. The unit
> 'Meter' would have the dimensionality (0, 1, 0), and let us choose
> for it the scaling factor 1. The unit 'Foot' would then have the
> same dimensionality, and a scaling factor of 0.3048 (approx.). A
> certain measurement, let us call it 'NJRH' (my height), might be
> 5.95 foot. I intend that the Ada conversion Meter(NJRH) would be
> predefined, and have the value 1.813 (approx.), as well as the
> conversion Foot(Meter'(1.813)), having the value 5.95 (approx.).

Ok, but I'm not clear how to declare these in your new Ada.

> We could imagine a unit (and I don't know whether this corresponds
> to custom in physics) called, say 'Log_Foot', which is intended to
> represent the natural logarithm of feet. 

Nothing like this in physics; there is no need for it. But I'll keep
reading :).

> It would have the dimensionality (0, 1/e, 0) and a scaling factor of
> our choosing, let us choose 1. The value of NJRH in log feet would
> be 1.783 (approx.).

I'm not clear why a "dimensionality" of 1/e corresponds to the log of
feet, but then I don't know what log of feet means, so I guess you get
to define it. 

> I do not intend that the Ada conversion Log_Foot(NJRH) would be
> permitted, nor Foot(Log_Foot'(1.783)). To achieve these conversions,
> it would be necessary to use Log and Exp functions explicitly. Thus,
> instead of Log_Foot(NJRH) we write Log(NJRH), and instead of
> Foot(Log_Foot'(1.783)) we write Exp(Log_Foot'(1.783)).

But, how does the poor compiler know which conversions to allow, and
which to (pre)define?

> Assuming (and this may be an assumption that has to be dropped)
> units are built into Ada by means of -- having added an extra 'unit'
> attribute (in the notional sense as well as actually adding the
> attribute 'Unit) to all scalar types -- permitting the unit to be
> specified for fixed point types, 

Why are we still stuck on fixed point types? 

> it would be necessary to provide a package such as this:
> 
> 
>    generic
>       type Proportional_Type is delta <>;
>       type Logarithmic_Type is delta <>;
>       Base: constant some_real_type := e;
> 
>    package Ada.Numerics.Generic_Logarithmic_Functions is
> 
>       function Log (X: in Proportional_Type) return Logarithmic_Type;
>       function Exp (X: in Logarithmic_Type) return Proportional_Type;
> 
>    end;
> 
> 
> This package would check, upon instantiation, that the dimensionalities of
> Proportional_Type and Logarithmic_Type -- (Mp,Lp,Tp) and (Ml,Ll,Tl)
> respectively, let's say -- are related in the correct way: Mp=Ml/e; Lp=Ll/e;
> Tp=Tl/e. Typically, it should be possible for this check to be done at
> compile time.

Ok, sounds like you could make it consistent.

> According to our example units, this package would be instantiated
> something like this:
> 
> 
>    package Foot_Log_Functions is
>       new Ada.Numerics.Generic_Logarithmic_Functions(Foot,Log_Foot);
> 
>    use Foot_Log_Functions;
> 
> 
> Now, having discussed this matter with my dad (a physicist), we still
> couldn't agree whether this interpretation is correct, so I'd be really
> grateful for any kind of (more) authoritative comment.

Well, "correct" is a loaded term. I still maintain that, in physics,
log (meters) is _meaningless_, and _never_ occurs in a real-world
problem. So attempting to define its meaning in Ada is simply not
useful. You can define something that is self-consistent, but it won't
match physics.

I don't think you'll find a physics text that actually states "log
(meters) is meaningless and forbidden", because it seems obvious, but
I'll look in mine tonight. Maybe a high school text, where they
introduce the notion of measurement, would discuss this (I only have
my college text).

-- 
-- Stephe



  reply	other threads:[~2001-12-13 19:04 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 [this message]
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
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