A-问题收益率

问题:
在金融中,我们有时会用内部收益率IRR来评价项目的投资财务效益,它等于使得投资净现值NPV等于0的贴现率。换句话说,给定项目的期数T、初始现金流CF0和项目各期的现金流CF1, CF2, …,CFT,IRR是下面方程的解:
这里写图片描述
为了简单起见,本题假定:除了项目启动时有一笔投入(即初始现金流CF0 < 0)之外,其余各期均能赚钱(即对于所有i=1,2,…,T,CFi > 0)。根据定义,IRR可以是负数,但不能大于-1。
分析:
可以用二分法不断二分最后不断逼近正确答案,因为CF0是负的,所以把后面几项的和与第一项比较就行,因为边界不好控制,所以直接二分50次;
代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int N = 10000 + 5;
const int eps = 1e-8;
double a[N];

double solve(int n){
    double l,r,mid,f,ans;
    l = -1.0,r = 10000;
    for(int t = 1;t<=100;t++){
        mid = (r+l)/2;
        f = 1.0,ans = 0;
        for(int i=1;i<=n;i++){
            f=f/(1+mid);
            ans += a[i]*f;
        }
        if(ans > (-a[0])) l = mid;
        else r = mid;
    }
    return mid;
}

int main(){
    int n;
    while(cin >> n && n){
        for(int i=0;i<=n;i++)
            cin >> a[i];
        printf("%.2lf\n",solve(n));
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/Pretty9/p/7347692.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值