12

下面的 C++ 程序应该返回一个严格的正值。但是,它返回0

发生什么了 ?我怀疑是 int-double 转换,但我不知道为什么以及如何。

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{

    vector<double> coordinates;
    coordinates.push_back(0.5);
    coordinates.push_back(0.5);
    coordinates.push_back(0.5);

     cout<<inner_product(coordinates.begin(), coordinates.end(), coordinates.begin(), 0)<<endl;

    return 0;
}
4

2 回答 2

15

因为您提供了0,的初始值int。您的代码在内部等效于:

int result = 0;

result = result + 0.5 * 0.5; // first iteration
result = result + 0.5 * 0.5; // second iteration
result = result + 0.5 * 0.5; // third iteration

return result;

虽然result + 0.5 * 0.5产生正确的值(在此表达式result中提升为double),但当该值被分配回 时result,它会被截断(该表达式被强制转换为int)。你永远不会超越1,所以你看0

0.0相反,给它一个初始值。

于 2012-08-22T01:01:59.123 回答
4

这是因为您提供了零作为整数常量。结果运算都是整数,因此最终值 ( 0.75) 也被截断为 an int

将零更改0.0为使其工作:

cout << inner_product(coord.begin(), coord.end(),coord.begin(), 0.0) << endl;

0.75ideone上产生。

于 2012-08-22T01:00:40.607 回答