Я не знаю, правильно ли я это реализую. Я создал функцию с именем 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);
}
Я вижу пару проблем с кодом:
float numWords = v.size()/65536;
(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
(или что-то лучше).
Других решений пока нет …