Я не знаю, как использовать повышение, и хотя мой учитель предоставил код, я получаю ошибку

Я не знаю, правильно ли я это реализую. Я создал функцию с именем boosted, которая возвращает значение с плавающей точкой для заданного значения, но я получаю эту ошибку.

terminate called after throwing an instance of

'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::domain_error> >'
what():  Error in function boost::math::cdf(const chi_squared_distribution<double>&, double): Chi Square parameter was -nan, but must be > 0 !
Aborted

Может кто-нибудь объяснить, почему я получаю это и как заставить это работать? Я предоставил сайт моего учителя http://staffwww.fullcoll.edu/aclifton/cs133/assignment5.html
и мой код для функции.

float boosted (vector <int>& v){
float c2 = 0;
float numWords = v.size()/65536;
for(int i = 0; i < v.size(); i++)
c2 = pow(numWords - v[i], 2)/numWords;

boost::math::chi_squared c2d(65535.0);
return boost::math::cdf(c2d, c2);
}

-3

Решение

Я вижу пару проблем с кодом:

  1. целочисленное деление: float numWords = v.size()/65536;
  2. с2 предполагается суммированием (expected - hashes[i])/expected

Попробуй это:

 float boosted (vector <int>& v){
float c2 = 0;
float numWords = v.size()/65536.0;
for(int i = 0; i < v.size(); i++)
c2 += pow(numWords - v[i], 2)/numWords;

boost::math::chi_squared c2d(65535.0);
return boost::math::cdf(c2d, c2);
}

Кроме того, numWords следует переименовать в expected (или что-то лучше).

1

Другие решения

Других решений пока нет …