我正在计算一个折扣系数,给出一个利率和每年支付的次数。
#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。
有人知道怎么回事吗?
问题出在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);
是一个解决方案。