pow 的问题给我一个无限的答案
Problem with pow giving me an infinite answer
我正在尝试计算给定费率和每年付款次数的折扣系数。
#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
是 grouped as (-due_dates_per_year) * t
(这就是 C++ grammar 解析表达式的方式)。 unsigned
类型的一元否定会产生一个大的(以及 unsigned
)的数字来解释结果。
除了为 due_dates_per_year
使用 signed
类型外,重新排列
double df = std::pow(1 + rate / due_dates_per_year, -t * due_dates_per_year);
是一个修复。
我正在尝试计算给定费率和每年付款次数的折扣系数。
#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
是 grouped as (-due_dates_per_year) * t
(这就是 C++ grammar 解析表达式的方式)。 unsigned
类型的一元否定会产生一个大的(以及 unsigned
)的数字来解释结果。
除了为 due_dates_per_year
使用 signed
类型外,重新排列
double df = std::pow(1 + rate / due_dates_per_year, -t * due_dates_per_year);
是一个修复。