|
Boost Users : |
From: Anders Sundman (d00-asu_at_[hidden])
Date: 2004-03-31 03:03:40
On Tue, 30 Mar 2004, David Abrahams wrote:
> Anders Sundman <d00-asu_at_[hidden]> writes:
>
> > Hi all!
> >
> > I'm using the lambda library to compute the sum of squared
> > differences, but I have encountered a puzzling problem. I would
> > really appreciate if someone could explain it to me.
> >
> > This doesn't compile:
> >
> > std::inner_product(i1, i1+x, i2, 0.0,
> > (_1 + _2), (_1*_1)(_1 - _2));
> >
> > however, this does:
> >
> > std::inner_product(i1, i1+x, i2, 0.0,
> > std::plus<double>(), (_1*_1)(_1 - _2));
> ^^^^^^^^ ^
>
> Doesn't seem right. Do you really mean to invoke the function call
> operator on the result of _1*_1 ??
>
I might be missing something obvious, but i seems right to me. I'm
trying to compute: sum((i1[i] - i2[i])^2). (_1*_1)(_1 - _2) computes
the (i1[i] - i2[i])^2 part, and it seems to work fine. Then the first
binary operator is applied to the result, so I think it's what I
want.
Here is a short program that demonstrates the problem:
#include <iostream>
#include <numeric>
#include <boost/lambda/lambda.hpp>
using namespace boost::lambda;
int main(void) {
double x1[] = {2.0, 1.0, 0.0, 3.0, 2.0};
double x2[] = {1.0, 2.0, 0.0, 1.0, -2.0};
/*
double ssd = std::inner_product(x1, x1+5, x2, 0.0,
std::plus<double>(),
(_1*_1)(_1 - _2));
*/
double ssd = std::inner_product(x1, x1+5, x2, 0.0,
(_1 + _2),
(_1*_1)(_1 - _2));
std::cout << "ssd: " << ssd << std::endl;
return 0;
}
--- Best regards Anders Sundman
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