gpt4 book ai didi

c++ - 使用 std::inner_product 时内积为零

转载 作者:IT老高 更新时间:2023-10-28 23:15:14 27 4
gpt4 key购买 nike

下面的 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;
}

最佳答案

因为您提供了一个初始值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

关于c++ - 使用 std::inner_product 时内积为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12065041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com