unsigned long long a,b,c;
cin>>a>>b>>c;
cout<<(a*b*c);
輸入:512 294967268 279632277 輸出:5337484673731225600乘法給人用C不同的答案++和Python給
然而,當我在Python做512 * 294967268 * 279632277
,輸出我得到的是:
42230972821150328832L
爲什麼我會得到不同的答案?
unsigned long long a,b,c;
cin>>a>>b>>c;
cout<<(a*b*c);
輸入:512 294967268 279632277 輸出:5337484673731225600乘法給人用C不同的答案++和Python給
然而,當我在Python做512 * 294967268 * 279632277
,輸出我得到的是:
42230972821150328832L
爲什麼我會得到不同的答案?
確實在C++溢出。
Python具有任意大小的數據類型來存儲結果。因此,如果要存儲的值很大,則數據類型的大小也會自動變大。
>> x = 512 * 294967268 * 279632277
>> x
42230972821150328832L
>> type(x)
<type 'long'>
>> x.__sizeof__()
36
>> x = x * x
>> x
1783455065420737763677831948901730484224L
>> type(x)
<type 'long'>
>> x.__sizeof__()
44
所以幾乎沒有對數據類型的大小沒有限制。可用內存定義了理論極限。
通常會發生的情況是整數在需要時被提升爲任意精度整數類型。更多關於[這裏](http://stackoverflow.com/questions/4581842/python-integer-ranges)。 – juanchopanza
使用GNU多精度算術庫http://gmplib.org/ – Damian
明顯溢出。改爲使用'long double'。看看'sizeof(long long)'和'long double',你會看到不同之處。 –