使用std :: inner_product时零内部产品

Kla*_*aus 12 c++ type-conversion standard-library

下面的C++程序应该返回一个严格的正值.然而,它返回0.

怎么了 ?我怀疑是双重转换,但我无法弄清楚为什么以及如何.

#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;
}
Run Code Online (Sandbox Code Playgroud)

GMa*_*ckG 14

因为你提供了一个初始值0,a 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;
Run Code Online (Sandbox Code Playgroud)

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

给它一个初始值0.0.