Dobry wieczór. Piszę program, w którym potrzebne jest mi obliczenie symbolu Newtona. W tym celu napisałem stosowną funkcję. Problem w tym, że już po pierwszym teście (n=49, k=6) funkcja zwraca błędną wartość (12224520 zamiast 13983316). Szukałem różnych implementacji, jednak wszystkie iteracyjne nie różnią się od mojej. Co może być nie tak?
#include <iostream>
uint64_t binomial(uint64_t n, uint64_t k) {
if(k>n-k) {
k=n-k;
}
uint64_t result=1;
for(uint64_t i=1; i<=k; ++i)
{
result*=(n-i+1)/i;
}
return result;
}
int main()
{
//test
uint64_t x=binomial(49, 6);
std::cout<<x<<std::endl;
return 0;
}