|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2001-04-22 07:15:26
From: "Ed Brey" <brey_at_[hidden]>
> AFAICT, it is impossible to have a single interface that works for both:
> (a) compile-time computation of expressions, and
> (b) custom-binary values, which are more accurate than the compiler
> can produce.
Here's my take on this:
// Documented interface
namespace boost
{
float const pi_f;
double const pi;
long double const pi_l;
}
// Possible implementation 1
namespace boost
{
double const pi = 3.141592653...;
}
// Possible implementation 2
namespace boost
{
extern double const pi;
}
// Possible implementation 3
namespace boost
{
unsigned char const _pi[] = { insert suitably non-portable values
here };
double const & pi = *(double*)_pi;
}
The user can hardly tell the difference between 1), 2) and 3).
For generic code, this may be supplemented with a numeric_limits-like
template, although I think that a static_cast<T>(pi_l) would probably
suffice.
-- Peter Dimov Multi Media Ltd.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk