在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中不存在]?