3

我正在阅读 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++ 使用的示例,而不是用于任何商业或产品用途。这也是我第一次发布关于堆栈溢出的问题,所以如果我遗漏了任何内容,请发表评论,我会更改它。

4

1 回答 1

1

观察你从函数返回的内容

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 ; 
    return p;
}
于 2013-06-11T17:05:10.810 回答