nicolas wrote:[color=blue]
> I was very surprised by the output of the following program:
>
> #include <iostream>
> #include <numeric>
>
> int main() {
>
> double vals_1[5]= { 0.5, 0.2, 0.1, 0.1, 0.1 };
> double vals_2[5]= { 0.1, 0.1, 0.1, 0.2, 0.5 };
> double sum1 = std::accumulate( vals_1, vals_1+5, 0. );
> double sum2 = std::accumulate( vals_2, vals_2+5, 0. );
> if( sum1 != 1. )
> std::cout << "sum1 not ok ";
> else
> std::cout << "sum1 ok ";
> if( sum2 != 1. )
> std::cout << "sum2 not ok";
> else
> std::cout << "sum2 ok";
>
> std::cout << std::endl;
> }
>
>
> the output is: sum1 not ok sum2 ok
>
> Is that behavior to be expected? Do I have to use a function that
> compares up to some precision everytime
> I want to compare 2 doubles? I tried changing double to float: in that
> case both sums are ok.
>[/color]
See:
http://www.eskimo.com/~scs/C-faq/q14.5.html
(It's from the C-FAQ, but is the same for C++.)
HTH,
--ag
--
Artie Gold -- Austin, Texas