$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Fernando Cacciola (fcacciola_at_[hidden])
Date: 2001-10-25 08:15:16
----- Original Message -----
From: Greg Colvin <gcolvin_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Thursday, October 25, 2001 1:37 AM
Subject: Re: [boost] Math constants for naive and gurus? - which constants
do you want?
> Here is yet another suggestion.  It allows most users to just write
>     v = pi
> and get a pretty good approximation to pi, and pronto.
>
> And it allows generic programmers to write things like:
>
>     template<typename T> mashed_pi() {
>         return mash(constant<T>(pi));
>     }
>
> And it allows boost::math::constants library implementors to provide
> specializations that are faster, more precise, or whatever.
>
> And it provides a pattern for other numeric libraries to take advantage
> of, e.g.:
>
>       template<> inline rational<int> constant(const pi_&) {
>          return rational<int>(5419351,1725033);
>       }
>
> Here is a sketch of an implementation:
>
>    namespace constants {
>
>       // an example constant, suitable for everyday abuse
>       static const struct pi_ {
>          pi_(){}
>          inline operator long double() const {
>             return 3.141592653589793238462643383279502884197L;
>          }
>       } pi;
>
>       // a generic constant generator
>       template<typename T, typename V> inline T constant(const V& v) {
>          return static_cast<T>(v);
>       }
>
>       // example specializations of the constant generator
>       template<> inline float constant(const pi_&) {
>          return 3.141593F;
>       }
>       template<> inline double constant(const pi_&) {
>          return 3.14159265358979;
>       }
>       template<> inline long double constant(const pi_&) {
>          return 3.141592653589793238L;
>       }
>    }
>
>
>
This looks really good to me!
I can't see any drawback... I think I'll buy it.
Fernando Cacciola
Sierra s.r.l.
fcacciola_at_[hidden]
www.gosierra.com