我有一些大整数,我知道他们可能大于sys.maxint
但肯定小于handleUpdateUsername(event) {
console.log(this.state)
event.persist()
this.setState({
username: this.state.update('username', event.target.value)
})
}
所以他们在里面decimal precision of floats。现在我想对它们进行大量简单的算术运算。所有操作结果也保证小于10**16
。
我注意到转换为10**16
并执行操作比在float
(在Windows x64上使用Python 2.7.12)上操作速度至少快20%。
我可以依赖此行为并将计算从long
切换到long
,还是这个性能提升取决于硬件/ python的实现?在这种情况下,还有其他方法可以提高性能吗?
我不关心任何小数点(如果是float
我只是抛弃任何余数),但整数部分必须是精确的。
我的基准
a / b
:
longtest.py
n = 10 ** 10
nums = [x for x in xrange(2, 100000)]
def testdiv():
for x in nums:
n/x
def testsum():
for x in nums:
n+x
def testmul():
for x in nums:
n*x
def testsub():
for x in nums:
n-x
:
floattest.py
基准代码import math
fl = math.floor
n = 1.0 * 10 ** 10
nums = [x * 1.0 for x in xrange(2, 100000)]
def testdiv():
for x in nums:
fl(n/x)
def testsum():
for x in nums:
n+x
def testmul():
for x in nums:
n*x
def testsub():
for x in nums:
n-x
:
longvsfloat.py
结果:
import timeit
num = 100
print 'float testdiv:', timeit.timeit( 'floattest.testdiv()', setup = 'import floattest', number=num)
print 'long testdiv:', timeit.timeit( 'longtest.testdiv()', setup = 'import longtest', number=num)
print 'float testsum:', timeit.timeit( 'floattest.testsum()', setup = 'import floattest', number=num)
print 'long testsum:', timeit.timeit( 'longtest.testsum()', setup = 'import longtest', number=num)
print 'float testmul:', timeit.timeit( 'floattest.testmul()', setup = 'import floattest', number=num)
print 'long testmul:', timeit.timeit( 'longtest.testmul()', setup = 'import longtest', number=num)
print 'float testsub:', timeit.timeit( 'floattest.testsub()', setup = 'import floattest', number=num)
print 'long testsub:', timeit.timeit( 'longtest.testsub()', setup = 'import longtest', number=num)