Estoy haciendo un programa que calcula la probabilidad de loterías. Especificación es elegir 5 números de 47 y 1 de cada 27double double vs long int
Así que hizo lo siguiente:
#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;
}
Sin embargo, el programa no funciona. El programa calcula por 30 segundos, luego me da Process 4 exited with code -1,073,741,676
Tengo que cambiar todo el int largo al doble largo, pero eso pierde precisión. ¿Es porque int largo es demasiado corto para los grandes valores? Aunque pensé que int largo hoy en día son 64 bits? Mi compilador es g ++ win32 (host de 64 bits).
La causa es: desbordamiento de datos ... – Nawaz