Я делаю программу, которая вычисляет вероятность лотереи. Спецификация - выбрать 5 чисел из 47 и 1 из 27
Итак, я сделал следующее:
#include <iostream>
long int choose(unsigned n, unsigned k);
long int factorial(unsigned n);
int main(){
using namespace std;
long int regularProb, megaProb;
regularProb = choose(47, 5);
megaProb = choose(27, 1);
cout << "The probability of the correct number is 1 out of " << (regularProb * megaProb) << endl;
return 0;
}
long int choose(unsigned n, unsigned k){
return factorial(n) / (factorial(k) * factorial(n-k));
}
long int factorial(unsigned n){
long int result = 1;
for (int i=2;i<=n;i++) result *= i;
return result;
}
Однако программа не работает. Программа рассчитывает 30 секунд, а затем дает мне Процесс 4 завершился с кодом -1,073,741,676
. Мне нужно изменить все long int на long double, но это теряет точность. Это потому, что long int слишком короток для больших значений? Хотя я думал, что long int в настоящее время 64-битные? Мой компилятор - g ++ win32 (64-битный хост).