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

这是一个愚蠢的有趣问题:


假设我们必须执行一个简单的操作,其中我们需要变量值的一半。有通常这样做的方法有两种:


y = x / 2.0;

// or...

y = x * 0.5;

假设我们正在使用该语言提供的标准运算符,那么哪一个具有更好的性能?


我猜想乘法通常更好,所以我在编码时会尽量坚持下去,但是我想确认一下。


尽管我个人对Python 2.4-2.5 的答案很感兴趣,但是也可以发布其他语言的答案!而且,如果您愿意,也可以发布其他更奇特的方式(例如使用按位移位运算符)。


qq_遁去的一_1
浏览 721回答 3
3回答

慕容森

蟒蛇:time python -c 'for i in xrange(int(1e8)): t=12341234234.234 / 2.0'real    0m26.676suser    0m25.154ssys     0m0.076stime python -c 'for i in xrange(int(1e8)): t=12341234234.234 * 0.5'real    0m17.932suser    0m16.481ssys     0m0.048s乘法快33%卢阿:time lua -e 'for i=1,1e8 do t=12341234234.234 / 2.0 end'real    0m7.956suser    0m7.332ssys     0m0.032stime lua -e 'for i=1,1e8 do t=12341234234.234 * 0.5 end'real    0m7.997suser    0m7.516ssys     0m0.036s=>没有真正的区别LuaJIT:time luajit -O -e 'for i=1,1e8 do t=12341234234.234 / 2.0 end'real    0m1.921suser    0m1.668ssys     0m0.004stime luajit -O -e 'for i=1,1e8 do t=12341234234.234 * 0.5 end'real    0m1.843suser    0m1.676ssys     0m0.000s=>仅快5%结论:在Python中,乘法要快于除法,但是当您使用更高级的VM或JIT接近CPU时,优势就会消失。将来的Python VM很可能会使其变得无关紧要

汪汪一只猫

我认为这变得太挑剔了,您最好做任何使代码更具可读性的事情。除非您执行该操作数千次(甚至数百万次),否则我怀疑有人会注意到这种差异。如果您真的必须做出选择,则基准测试是唯一的选择。查找哪些功能给您带来了问题,然后找出功能中出现问题的位置,并修复这些部分。但是,我仍然怀疑单个数学运算(甚至重复多次,多次)是否会引起任何瓶颈。
打开App,查看更多内容
随时随地看视频慕课网APP