WinPython 3.3.2 64bit(Win 8.1 64bit)上的虚假sum()溢出

时间:2014-01-22 21:03:19

标签: python types sum 64-bit overflow

在Win 8.1 64bit上,使用WinPython 3.3.2 64bit [仅限于此版本!]解决欧拉问题#10, 两个函数prob10和prob10i产生不同的结果:

def no_primes():
    return {j for i in range(2,5000) for j in range(i*2, 10000000,i)}

def primes():
    return \[i for i in range(2,10000000) if i not in no_primes()\]  


def prob10():    
        return int(sum(list(map(float,\[i for i in primes() if i<2000000\]))))

def prob10i():    
        return sum(\[i for i in primes() if i<2000000\])][1]

换句话说,如果在求和之前将它们转换为浮点数,则结果是正确的。 如果只是对它们求和,结果不到正确结果的1%(溢出?)。

涉及的所有数字都在sys.maxsize之下,所以问题是什么? 是否有效的某种sys.maxint [在Python3中不存在]?

0 个答案:

没有答案