提问者:小点点

Power的问题给了我无限的答案


我正在计算一个折扣系数,给出一个利率和每年支付的次数。

#include <iostream>
using namespace std;
int main()
{
    uint32_t due_dates_per_year = 2;
    double t = 1;
    double rate = 0.05;
    double df = pow(1 + rate / due_dates_per_year, -due_dates_per_year * t);
    cout << df;
    return 0;
}

输出为“INF”,但应该略小于1。

有人知道怎么回事吗?


共1个答案

匿名用户

问题出在std::pow的指数(即第二个参数)。 表达方式

-due_dates_per_year * t

被分组为(-due_dates_per_year)*t(这是C++语法解析表达式的方式)。 对unsigned类型的一元求反会产生一个很大(也是unsigned)的数字,它解释了结果。

除了对due_dates_per_year使用signed类型之外,重排

double df = std::pow(1 + rate / due_dates_per_year, -t * due_dates_per_year);

是一个解决方案。