मैं एक प्रोग्राम कर रहा हूं जो लॉटरी की संभावना की गणना करता है।लंबे डबल बनाम लंबे int
#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;
}
हालांकि कार्यक्रम काम नहीं करता: विशिष्टता 47 और 1 से 5 संख्या निम्नलिखित बाहर के 27
तो मैंने किया था चुनना है। कार्यक्रम 30 सेकंड के लिए गणना करता है, फिर मुझे Process 4 exited with code -1,073,741,676
देता है मुझे सभी लंबे int को लंबे समय तक बदलना होगा, लेकिन यह सटीकता खो देता है। क्या ऐसा इसलिए है क्योंकि बड़े मूल्यों के लिए लंबी int बहुत कम है? हालांकि मैंने सोचा था कि आजकल लंबे समय तक इंट 64 बिट हैं? मेरा कंपाइलर जी ++ win32 (64 बिट होस्ट) है।
कारण यह है: डेटा ओवरफ्लोwww ... – Nawaz