Boost logo

Boost :

From: Thorsten Ottosen (tottosen_at_[hidden])
Date: 2002-09-27 09:09:56


"Jason D Schmidt" <jd.schmidt_at_[hidden]> wrote in message
news:20020926.222854.3672.1.jd.schmidt_at_juno.com...
> Hi everyone,
>
> Not too long ago, I asked people on this list if anyone was interested in
> having math & physics values incorporated into Boost. Some people
> sounded interested, so here's what I'm proposing:
>
> template <class value_type>
> struct math_vals
> {
> static value_type pi()
> { return value_type(3.14); } // I'll use more digits
> static value_type e()
> { return value_type(2.72); }
> // more math values
> };
>
> Something like that. I'll get the actual values from a reliable
> reference and use as many digits as possible. I figure this is pretty
> simple, efficient, & portable. Maybe if someone thinks this is a little
> verbose, he/she could do something like this in user code:
> const float e = math_vals<float>::e();
>
> I could also do the same thing with physics-related values, like speed of
> light, Planck's constant, & more. However, those all have units, so
> their values depend on what system we're using. Would we want to just
> stick with SI units? Or might we want to have another struct for cgs
> (esu) units? Or would we want to have a units class that acts something
> like a policy?
>
> Does anyone have any thoughts on the general design I've proposed above
> or anything else?

I think that constants are really needed and your propasal is great. I
wonder if the term 'math_val' is good, though.
What about

math<float>::e();

or

constant<float>::e();

? I also wonder if we could get rid of the explicit type parameter. That is,
why shouldn't we just say

float f = math::e();
double = math::e();

That would reduce the hardcoding of precision. I could imagine an
implementation like this:

struct E
{
  operator float() const
{
   return <e with single precision>;
   }
 operator double() const
{
  return <e with double precisoin>;
}
};

struct math
{
 static E e() { return E(); }
};

Have I overloked something? As for different units, maybe one should choose
SI units as a default and provide means for getting other units if needed.

Thorsten Ottosen,
Dezide Aps, www.dezide.com


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk