# Boost :

From: Terje Slettebø (tslettebo_at_[hidden])
Date: 2003-04-27 07:19:31

>From: <renej_at_[hidden]>

Still on the subject of a quantity library.

> > There is DEFINITELY a need for this - and in the C++ Standard Library,
> > but the relative merits of the two proposals mae so far are not yet
> > clear to me.
> >
> > Perhaps we need more real user experience. (Or is the problem that the
> > MSVC compiler can't/couldn't handle the SIUnits code?)
>
> real user experience... you asked for it ;-)
> we use the int-based template approach for a couple of years now in
> our AGV controller software. We actually sometimes reach the stage that
> it works when succesfully compiled and linked. Since our control software
> is physics throughout (field of robotics), the type safety is very
> important. However, besides the basic SI units we also have 'angle'
> as a dimension which allows us to distinguish 'velocity' and 'angular
> velocity' for example. Hence, from out 'real user' experience (engineering
> point of view) it would be a necessity to add 'angle' as a dimension
> without breaking already defined quantities. Most (all?) units libraries
> already define 'angle' to be dimensionless, which is true in
scientifically
> spoken, but pragmatically (engineering ;-) less handy.

Regarding this angle dimension, should it be treated like the other
SI-dimensions? That is, say that you represent an SI quantity/unit with an
integer vector giving the exponents:

template<int kg,int m,int s,int A,int K,int mol,int cd,int angle>
class quantity;

If you multiply two quantities, you multiply the value and add the
exponents, so quantity<0,1,0,0,0,0,0,0>(10) * quantity<0,1,0,0,0,0,0,0>(10)
= quantity<0,2,0,0,0,0,0,0>(100) (m * m = m^2)

Would this hold for angle, as well? That is, does it make sense to say angle
* angle = angle^2? I understand that e.g. angle/s (angular velocity) makes
sense, but should a library allow any combination with angle and the other
dimensions?

How do you treat angle in your own library?

Regards,

Terje