|
Boost Users : |
Subject: Re: [Boost-users] [units][accumulators] buggy behavior for min accumulator of quantities
From: alfC (alfredo.correa_at_[hidden])
Date: 2011-03-12 19:45:57
Answering to myself:
On Mar 12, 3:04 pm, alfC <alfredo.cor..._at_[hidden]> wrote:
> Hi,
> Sometimes it is difficult to make boost::units quantities with other
> libraries. For example to have boost::accumulators mean work with
> units, one has to specialize division by integer for quantities.
>
> In this example the accumulators and units compiles out of the box but
> gives an incorrect answer.
I found the solution, just add
#include<boost/units/limits.hpp>
in this way the min/max function can initialize the default maximum/
minimum value, which is given by the numeric limits of the type.
Anyway, I would suggest to the authors of boost.units to include
limits.hpp by default in the core library in order *to avoid this
surprises*.
Or better yet, make the author of boost.accumulators to support
boost.units.
By the way I made boost accumulators to work with min, max (see above)
and mean by adding the below code. Variance, etc. is more difficult to
implement because boost.accumulators assumes that t*t is always of
type t.
namespace boost {namespace numeric{namespace functional{
using namespace boost::units;
template<class Unit, typename Y> struct quantity_tag{};
template<class Unit, typename Y> struct tag<quantity<Unit,Y> >{
typedef quantity_tag<Unit,Y> type;
};
template<typename Left, typename Right>
struct average<Left, Right, quantity_tag<typename Left::unit_type,
typename Left::value_type>, void>{
typedef Left result_type;
result_type operator()(Left & left, Right & right) const{
return left/(typename Left::value_type)right;
}
};
}}}
Thanks,
Alfredo
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net