我正在阅读 Bernt Arne Ødegaard 2007 年用 c++ 编写的财务数字食谱,您可以在此处找到整个文档:http: //finance.bi.no/~bernt/gcc_prog/recipes/recipes.pdf
该链接对于这个问题非常有用,因为我已经从那里复制了代码,并且控制台的输出有所不同。
我已经完成了第 4 章(第 36 页)中的示例,当我运行示例时(使用 Visual Studio 2012),我没有得到与示例输出中给出的相同的输出。我一直在寻找语法错误和偏差,但找不到任何东西。我也看不出输出应该不同的原因。
对于bonds_price_dicrete,我得到的值为0。
以下是示例 finance_recipies.cpp 文件代码:
#include <cmath>
#include <vector>
using namespace std;
double bonds_price_discrete(const vector<double>& times,
const vector<double>& cashflows,
const double& r) {
double p=0;
for (int i=0;i<times.size();i++) {
p += cashflows[i]/(pow((1+r),times[i]));
};
return p;
};
主程序:
vector<double> cflows; cflows.push_back(10); cflows.push_back(10); cflows.push_back(110);
vector<double> times; times.push_back(1); times.push_back(2); times.push_back(3);
double r=0.09;
cout << " bonds price = " << bonds price discrete(times, cflows, r) << endl;
示例输出:
bonds price = 102.531
我认为这可能是一个 int vs float 问题,但是将所有双打改为浮点数并没有做任何事情。这是我的财务食谱.cpp 代码:
double BondsPriceDiscrete(const vector<double> & Times, const vector<double> & cFlow, const double & rates)
{
double P = 0 ;
for (int i = 0 ; i < Times.size() ; i++)
{
P += cFlow[i]/(pow((1+rates),Times[i])) ;
};
return 0 ;
}
我在 main() 中调用的函数
const int BondsPriceDiscrete()
{
vector <double> cflow ; cflow.push_back(10) ; cflow.push_back(10) ; cflow.push_back(110) ;
vector <double> Times ; Times.push_back(1) ; Times.push_back(2) ; Times.push_back(3) ;
double rates = 0.09 ;
cout << "Bond Price: " << BondsPriceDiscrete(Times,cflow,rates) << endl ;
return 0 ;
}
我的文件结构只是金融数字食谱的头文件和 cpp 文件,我在头文件和运行的 cpp 文件中有包含保护和#include cmath、向量、算法、iostream、string.h 和 stdafx.h主要的。没有其他文件附件,代码运行良好,只是输出不匹配......
请注意,我将通过它们来练习金融中 C++ 使用的示例,而不是用于任何商业或产品用途。这也是我第一次发布关于堆栈溢出的问题,所以如果我遗漏了任何内容,请发表评论,我会更改它。