gpt4 book ai didi

c++ - C++尝试使用max和累加函数

转载 作者:行者123 更新时间:2023-12-02 11:10:14 28 4
gpt4 key购买 nike

我是C++的新手,这是我尝试编写的第一个程序。在下面的代码中,我想模拟期权的价格并计算其值(value)。我在积累函数时出错。

我已经尝试过std::maxstd::accumulate,但它们也无法正常工作。

#include <iostream>
#include <algorithm>
#include <cmath>
#include<random>
#include<numeric>
#include<vector>
using namespace std;

double mc(int S, int K, float r, float vol, int T, int sim, int N){
mt19937 rng;
normal_distribution<>ND(0,1);
ND(rng);
std::vector<double> s(sim);
double dt = T/N;
for(int i =0;i<sim;i++)
{
std::vector<double> p(N);
p[0]=S;
for(int k = 0;k<N;k++)
{
double phi = ND(rng);
p[i+1] = p[i]*(1+r*dt+vol*phi*sqrt(dt));

}
s[i] = max(p[N-1]-K,0);

}
float payoff = (accumulate(s)/sim)*exp(-r*T);
return payoff;
}

int main(){
cout << mc(100,100,0.05,0.2,1,100,100) << endl;
return 0;
}

错误:
> test1.cpp:26:21: error: no matching function for call to 'accumulate'
> float payoff = (accumulate(s)/sim)*exp(-r*T);
> ^~~~~~~~~~ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/numeric:158:1:
> note: candidate function template not viable: requires 3 arguments,
> but 1 was provided accumulate(_InputIterator __first, _InputIterator
> __last, _Tp __init) ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/numeric:168:1:
> note: candidate function template not viable: requires 4 arguments,
> but 1 was provided accumulate(_InputIterator __first, _InputIterator
> __last, _Tp __init, _BinaryOperation __binary_op) ^ 2 errors generated.

编辑:固定最大功能。它使用0.0而不是0

最佳答案

阅读 std::accumulate 上的C++标准库文档将解决您的问题。但是,由于您是该语言的新手,并且对于初学者来说,STL有点难以理解,因此,这里是阅读文档的方法。

template< class InputIt, class T >
T accumulate( InputIt first, InputIt last, T init );
std::accumulate是一个泛型函数,因此它以泛型类型 T为模板。就您而言,是 T = double。它需要两个输入迭代器 firstlast,以及一个初始值 init,类型为 T = double。因此,以下是有关如何累积 std::vector<double>的示例。
std::vector<double> v = { 1., 2., 3. };
double result = std::accumulate(v.begin(), v.end(), 0.);

请注意, vector::beginvector::end分别将迭代器返回到容器的开头和结尾。

使用迭代器并提供初始值来替换对 accumulate的调用。

关于c++ - C++尝试使用max和累加函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55983358/

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