Sur*_*rya 5 python largenumber
我正在做一个难题,我必须处理订单数量10 ^ 18.但是,我发现python无法在所有区域处理非常大的数字.
具体来说,如果我们分配一个= 1000000000000000000(10 ^ 18)并进行基本的算术运算(+, - ,/,*),它的响应.但是,当我在range()中使用它时,它显示OverflowError
>>> a = 1000000000000000000
>>> a/2
500000000000000000L
>>> a*2
2000000000000000000L
>>> a+a
2000000000000000000L
>>> a*a
1000000000000000000000000000000000000L
>>> range(a)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
range(a)
OverflowError: range() result has too many items
>>> xrange(a)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
xrange(a)
OverflowError: Python int too large to convert to C long
Run Code Online (Sandbox Code Playgroud)
我使用的是Python 2.7.
我想在python 2.7中使用inbuild函数来完成它.那可能吗?
Dav*_*nan 10
在Python 2.x中,range并且xrange仅限于使用C,long而你的大整数对于它来说太大了.这个限制仅仅是由于对所做的实现选择range和xrange.
在Python 3.x中,限制已被删除,您可以range()使用非常大的整数执行.
>>> range(2**128)
range(0, 340282366920938463463374607431768211456)
Run Code Online (Sandbox Code Playgroud)
range()现在表现得像xrange()以前的行为,除了它适用于任意大小的值.后者不再存在.
在Python 2.x中,range()函数返回了一个列表.显然,没有希望为非常大范围的所有元素分配内存.该xrange()函数返回一个xrange对象.该文档将其描述为"一种不透明的序列类型,它产生与相应列表相同的值,而不是实际同时存储它们".文档继续这样说:
xrange()旨在简单快速.实现可能会对此实施限制.Python的C实现将所有参数限制为本机C long("短"Python整数),并且还要求元素的数量适合本机C long.
这解释了Python 2.x中的限制.
我不太清楚你可以用非常大范围的新Python 3支持做些什么.例如,我不建议您尝试这样做:
2**128 in range(2**128)
Run Code Online (Sandbox Code Playgroud)
这将持续很长时间.
您在评论中指出您正在编写代码以计算大量数字.您可以使用以下代码在Python中轻松完成此操作:
i = 0
while i<N:
doSomething(i)
i += 1
Run Code Online (Sandbox Code Playgroud)
但你会发现,如果N数量很大,那么这需要很长时间.根据您的问题,没有任何绕过N2 18的订单值.