2013-11-03 30 views
2
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 

为什么我会得到不同的答案?

+0

明显溢出。改为使用'long double'。看看'sizeof(long long)'和'long double',你会看到不同之处。 –

回答

5

确实在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 

所以几乎没有对数据类型的大小没有限制。可用内存定义了理论极限。

+0

通常会发生的情况是整数在需要时被提升为任意精度整数类型。更多关于[这里](http://stackoverflow.com/questions/4581842/python-integer-ranges)。 – juanchopanza

+0

使用GNU多精度算术库http://gmplib.org/ – Damian

相关问题