Проблема заключается в показателе степени ( т.е. второй параметр) std::pow
. Выражение
-due_dates_per_year * t
- это сгруппировано как (-due_dates_per_year) * t
(именно так грамматика C ++ анализирует выражение). Унарное отрицание типа unsigned
дает большое (а также unsigned
) число, которое объясняет результат.
Помимо использования типа signed
для due_dates_per_year
, перестановка
double df = std::pow(1 + rate / due_dates_per_year, -t * due_dates_per_year);
- исправление.