c语言中乘法和除法一样吗,性能 | 您所在的位置:网站首页 › mod和除法哪个先算 › c语言中乘法和除法一样吗,性能 |
性能 - 我应该使用乘法还是除法? 这是一个愚蠢有趣的问题: 让我们说我们必须执行一个简单的操作,我们需要一半的变量值。 通常有两种方法: y = x / 2.0; // or... y = x * 0.5; 假设我们正在使用该语言提供的标准运算符,哪一个具有更好的性能? 我猜测乘法通常更好,所以我在编码时会尽力坚持,但我想证实这一点。 虽然我个人对Python 2.4-2.5的答案感兴趣,但也可以发布其他语言的答案! 如果您愿意,也可以随意发布其他更好的方式(比如使用按位移位运算符)。 25个解决方案 73 votes 蟒蛇: 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% LUA: 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很可能会使它变得无关紧要 Javier answered 2019-07-07T03:17:09Z 63 votes 始终使用最清楚的东西。 你做的其他事情就是试图超越编译器。 如果编译器完全是智能的,它会尽力优化结果,但是没有什么可以让下一个人不讨厌你的糟糕的位移解决方案(顺便说一下,我喜欢点操作,它很有趣。但是 好玩!=可读) 过早优化是万恶之源。 永远记住三个优化规则! 不要优化。 如果您是专家,请参阅规则#1 如果您是专家并且可以证明需要,那么请使用以下过程: 编码未经优化 确定有多快"足够快" - 注意哪个用户要求/故事需要该指标。 写一个速度测试 测试现有代码 - 如果速度足够快,您就完成了。 重新编码优化 测试优化代码。 如果它不符合指标,则将其丢弃并保留原始指标。 如果符合测试,请将原始代码保留为注释 此外,在不需要内部循环时执行删除内部循环或在数组上选择链接列表以进行插入排序等操作不是优化,只是编程。 Bill K answered 2019-07-07T03:19:11Z 47 votes 我认为这是非常挑剔的,以至于你最好不要做任何使代码更具可读性的东西。 除非你执行数千次,甚至数百万次的操作,否则我怀疑任何人都会注意到这种差异。 如果你真的需要做出选择,基准测试是唯一的出路。 找出哪些函数给你带来问题,然后找出问题出现在函数中 |
CopyRight 2018-2019 实验室设备网 版权所有 |