为了账号安全,请及时绑定邮箱和手机立即绑定

我应该使用乘法还是除法?

我应该使用乘法还是除法?

qq_遁去的一_1 2019-10-09 15:16:45
这是一个愚蠢的有趣问题:假设我们必须执行一个简单的操作,其中我们需要变量值的一半。有通常这样做的方法有两种:y = x / 2.0;// or...y = x * 0.5;假设我们正在使用该语言提供的标准运算符,那么哪一个具有更好的性能?我猜想乘法通常更好,所以我在编码时会尽量坚持下去,但是我想确认一下。尽管我个人对Python 2.4-2.5 的答案很感兴趣,但是也可以发布其他语言的答案!而且,如果您愿意,也可以发布其他更奇特的方式(例如使用按位移位运算符)。
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

蟒蛇:


time python -c 'for i in xrange(int(1e8)): t=12341234234.234 / 2.0'

real    0m26.676s

user    0m25.154s

sys     0m0.076s


time python -c 'for i in xrange(int(1e8)): t=12341234234.234 * 0.5'

real    0m17.932s

user    0m16.481s

sys     0m0.048s

乘法快33%


卢阿:


time lua -e 'for i=1,1e8 do t=12341234234.234 / 2.0 end'

real    0m7.956s

user    0m7.332s

sys     0m0.032s


time lua -e 'for i=1,1e8 do t=12341234234.234 * 0.5 end'

real    0m7.997s

user    0m7.516s

sys     0m0.036s

=>没有真正的区别


LuaJIT:


time luajit -O -e 'for i=1,1e8 do t=12341234234.234 / 2.0 end'

real    0m1.921s

user    0m1.668s

sys     0m0.004s


time luajit -O -e 'for i=1,1e8 do t=12341234234.234 * 0.5 end'

real    0m1.843s

user    0m1.676s

sys     0m0.000s

=>仅快5%


结论:在Python中,乘法要快于除法,但是当您使用更高级的VM或JIT接近CPU时,优势就会消失。将来的Python VM很可能会使其变得无关紧要


查看完整回答
反对 回复 2019-10-09
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我认为这变得太挑剔了,您最好做任何使代码更具可读性的事情。除非您执行该操作数千次(甚至数百万次),否则我怀疑有人会注意到这种差异。

如果您真的必须做出选择,则基准测试是唯一的选择。查找哪些功能给您带来了问题,然后找出功能中出现问题的位置,并修复这些部分。但是,我仍然怀疑单个数学运算(甚至重复多次,多次)是否会引起任何瓶颈。


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 718 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信