Python提供了一个" bignum"类型称为"长"这可以代表任意大的数字。 此类型的内部代表是什么?
我问的部分是因为我很好奇这些数字的操作可能特别快或慢。例如,与乘法或除法相比,位移特别快(因为它是"常规"整数)?
答案 0 :(得分:3)
CPython的任意精度整数存储为二进制digits
数组。每个digit
由15或30位组成。加法,减法和位移都是O(n)。乘法(对于足够大的值)使用Karatsuba multiplication,即O(n ** 1.585)。
Division仍然使用经典的O(n ** 2)算法。
答案 1 :(得分:0)
好吧,我写了这个。我不确定这有多好,但您可以将其作为更精确和完整基准的起点。
import timeit
def timef(f, *args):
return timeit.timeit(lambda: f(*args), number = 1000000) # repetitions
tests = {
'addition' : lambda x: x + 17,
'substraction' : lambda x: x - 17,
'multiplication': lambda x: x * 17,
'division' : lambda x: x / 17,
'float division': lambda x: x / 17.0
}
for name, f in tests.items():
print 'int {0}'.format(name).ljust(20), timef(f, 0)
print 'long {0}'.format(name).ljust(20), timef(f, 10 ** 50)
print
我所看到的是int()
操作确实更快,但很多更快。