gpt4 book ai didi

C++ - 在 "for"函数中计算平均值

转载 作者:行者123 更新时间:2023-11-30 03:24:57 26 4
gpt4 key购买 nike

我正在尝试为(外汇)metatrader4 平台 (C++) 创建我自己的指标,但我在使用 for 函数时遇到了一个逻辑问题。

这是我的代码的一部分

for(int i = limit - 1; i >= 0; i--) { 
CCI_buffer[i] = iCCI(NULL,0,CCI_period,PRICE_WEIGHTED,i);
}

此代码将返回每个柱(数组)的值。这可以。但我正在尝试计算最后 3 个(例如)柱的平均值。

我想要实现的实际示例。

(input values)
CCI_buffer[0] = 100
CCI_buffer[1] = 50
CCI_buffer[2] = 0
CCI_buffer[3] = 50
CCI_buffer[4] = 100


CCI_average[0] = (CCI_buffer[0] + CCI_buffer[1] + CCI_buffer[2]) / 3 ([0]= 50)
CCI_average[1] = (CCI_buffer[1] + CCI_buffer[2] + CCI_buffer[3]) / 3 ([1]= 33.33)
CCI_average[2] = (CCI_buffer[2] + CCI_buffer[3] + CCI_buffer[4]) / 3 ([2]= 50)

我该怎么做?在这种情况下,我的逻辑失败了(我可能是个傻瓜),我需要继续前进。

我应该两次使用“FOR”函数吗?

for{
for{

}
}

或者我在公式中有“FOR”函数来计算吗?

for {
CCI_average[i] = ....
}

最佳答案

使用两种方法解决任务的示例:

#include <iostream>
#include <cassert>
#include <numeric>

// Method 1
float cci_avg(int cci_buffer[], int index_start, int num_values, int size)
{
assert(index_start+num_values <= size);
assert(index_start >= 0);
assert(num_values > 0);

float sum = 0;
for(int i=index_start; i < index_start+num_values; ++i)
{
sum += cci_buffer[i];
}

return sum/num_values;
}

int main() {
const int SIZE = 5;
int CCI_buffer[SIZE] = {100, 50, 0, 50, 100};

// Call method 1
std::cout << "0, 3: " << cci_avg(CCI_buffer, 0, 3, SIZE) << std::endl;
std::cout << "1, 3: " << cci_avg(CCI_buffer, 1, 3, SIZE) << std::endl;
std::cout << "2, 3: " << cci_avg(CCI_buffer, 2, 3, SIZE) << std::endl;
// fails
// std::cout << "3, 3: " << cci_avg(CCI_buffer, 3, 3, SIZE) << std::endl;

// Method 2 with std::accumulate
int num_values = 3;
std::cout << "0, 3 with accumulate: " << std::accumulate(&CCI_buffer[0], &CCI_buffer[0+num_values], 0)/
static_cast<float>(num_values) << std::endl;
std::cout << "1, 3 with accumulate: " << std::accumulate(&CCI_buffer[1], &CCI_buffer[1+num_values], 0)/
static_cast<float>(num_values) << std::endl;
std::cout << "2, 3 with accumulate: " << std::accumulate(&CCI_buffer[2], &CCI_buffer[2+num_values], 0)/
static_cast<float>(num_values) << std::endl;
return 0;
}

输出:

0, 3: 50
1, 3: 33.3333
2, 3: 50
0, 3 with accumulate: 50
1, 3 with accumulate: 33.3333
2, 3 with accumulate: 50

当您使用无效参数调用它时,断言调用只会给您一个警告。当然,您也可以在没有功能的情况下实现这一目标。

std::accumulate 的文档:http://en.cppreference.com/w/cpp/algorithm/accumulate

关于C++ - 在 "for"函数中计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49352520/

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