Я озадачен, оценивая следующую функцию, она производит число до F (0,8, 172, 1), но когда я увеличиваю 172 до 173, результат становится бесконечным. Я подозреваю, что существует проблема с числовой точностью?численная точность в рекурсивных функциях
double F(double d, int c, int t) {
// base cases
if ((c==1 && t==1) || (c==0 && t==0))
return 1.;
if (c==0 || t==0)
return 0.;
if (t>c)
return 0.;
return F(d,c-1,t-1) + (c-1 - t*d)*F(d,c-1,t);
}
Вы можете объяснить, что это делает? – Mox
Я не думаю, что здесь проблема точности. Причина в том, что double не используется как условие где-либо в этой функции. Возможно, настоящая ошибка где-то еще? – Mox
http://floating-point-gui.de/formats/fp/ Итак, вы на самом деле правы, это проблема с «двойной» численной точностью (в некотором смысле она ограничена во всех отношениях - конечно, вы можете поставить только так много числа в 64 бита). – Ped7g