Dwumian Newtona - błędny wynik

0

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;
}
1

Już znalazłem błąd. Część (n-i+1)/i jest typu int. Można więc albo rozbić to działanie na dwie oddzielne instrukcje (najpierw mnożenie, a potem dzielenie), albo zrzutować i na double.

1 użytkowników online, w tym zalogowanych: 0, gości: 1