我试图找出为什么这段代码返回-1。错误在于这段代码,我想我在这里错误地处理了迭代器。我想要做的是计算几何平均值。你可以在这里告诉我几件事我猜,但首先我要试着理解逻辑。
double indicators::GeoMean(input* Close1, input* Date1, int CurrDate, int StartDate) {
double temp1;
p1 = find(Date1->YearMonthDay.begin(),Date1->YearMonthDay.end(),StartDate); // <std::vector<int>::const_iterator>
auto positA = std::distance(Date1->YearMonthDay.begin(), p1);
cout << positA << endl;
p2 = find(Date1->YearMonthDay.begin(),Date1->YearMonthDay.end(),CurrDate);
auto positB = std::distance(Date1->YearMonthDay.begin(), p2);
cout << positB << endl;
// Start with the number 1. Add or subract to that number according to gain or loss.
for ( int i = positA; i > positB; i--) {
temp1 = 1.0 + ((Close1->Close[i-1] - Close1->Close[i]) / Close1->Close[i]);
daily.push_back(temp1);
}
double days = 1.0/daily.size();
double temp2 = std::accumulate(daily.begin(), daily.end(), 0.0, std::multiplies<double>());
double GM = (pow(temp2, days) ) -1.0;
cout << "GM is " << GM << endl;
// The geometric mean will always be equal to or less than the arithmetic mean.
return GM;
} 看起来这里的小数似乎被切断了:
double temp2 = std::accumulate(daily.begin(), daily.end(), 0.0, std::multiplies<double>());
我有一个模糊的想法,int值在某处优先于double,但我无法理解在哪里。除此之外,我对for循环的处理还有待改进。这里引用的类对象已经在其他函数中得到了很好的使用,因此问题在于此代码。函数的整数参数是作为纯整数的日期,在接口中使用,并且它们的类对象向量都具有相同的索引以供数据引用。 查找函数和距离为我提供了搜索向量的日期的精确索引,以便我可以返回并在Close-price向量上使用这些索引。 任何帮助将不胜感激。