微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

进行“小于或等于”比较时,哪种方法更快? TL;DR:a <= b 更快......但你真的不应该在意

如何解决进行“小于或等于”比较时,哪种方法更快? TL;DR:a <= b 更快......但你真的不应该在意

a <= ba < b + 1 快(或表现更好)?

如果你们需要一种语言来回答我的问题,那么我会使用 javascript,因为我最常使用它。

解决方法

TL;DR:a <= b 更快...


首先,让我们记住,在任何编程语言中,所有代码操作都会在某个时间点(无论是在运行时还是编译时)被提炼为它们的机器代码等价物,以便实际执行,因为处理器(例如CPU)只理解机器代码,不理解 C#、JavaScript 或 Go。

考虑到这一点,我们可以将两个表达式分解为更接近其基本部分的内容:

  • a <= b 完全是一个操作,不能进一步分解
  • a < b + 1更多一个操作,它(无需复习计算机架构)大致可分解为:
    • 计算b + 1
    • b + 1 的答案存储在缓存中(我们称之为 c
    • 从缓存中读取 c
    • 然后计算a < c

鉴于 this answer,这表明 <<= 在速度/效率方面是相等的(因为它们都是处理器级别的“跳转”类型指令)我们可以说a <= b绝对a < b + 1快,因为前者只是一个操作,而后者不止一个。

换句话说,如果比较操作需要x时间,而加法/存储/读取一起需要y时间,那么我们肯定知道 x + y 时间大于 x 时间,因为我们知道 xy 都是非零的(没有操作需要 zero 时间)。

...但你真的不应该在意


永远不要忘记,premature optimization is the root of all evil。您应该关心这种优化级别,因为它几乎可以保证无关紧要。 CPU 。你的时间和劳动最好花在更明显的密集和耗时的操作上,只有当你注意到它比你想要或需要的速度慢时。


如果您愿意,这里有一个实际的基准:https://jsben.ch/KVrug。它在多次运行中返回不一致的结果,这有助于说明为什么这对于实际使用并不重要。与往常一样,在某些情况下,此级别的优化可能会发挥作用,但总的来说,这无关紧要。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。