为什么比较运算符如此快速
why comparisons operators are so quick?
根据Alexandrescu的文章https://www.facebook.com/notes/facebook-engineering/three-optimization-tips-for-c/10151361643253920/
操作的速度层次结构为:
- 比较
- (u( int加法、减法、位运算、移位
- 浮点加法,sub(单独的单元!(
- 索引数组访问(注意:缓存效果(
- (u( int32 mul
- FP mul
- FP除法,余数
- (u( int除法,余数
我不明白为什么比较这么快。
如何快速比较两个大数字?算法是什么?
这些比较很快,因为它们很容易。这篇文章讨论的是数值的比较。通常,它们分为两种类型:将一个整数与同一格式的另一个整数进行比较,以及比较两个浮点数。
在整数比较的情况下,使用的整数格式可以以非常简单的方式比较两个值,以特定的顺序查看特定的位(符号位、高阶位,然后是低阶位(。
在浮点数的情况下,绝大多数值将以归一化形式表示,因此您可以按顺序进行比较:
- 对应的符号位,则如果它们相等
- 相应的指数,如果它们相等
- 对应的尾数(高位到低位,按位(
这些类型的比较在通用处理器中非常常见和重要,因此它们将针对速度进行优化。
相关文章:
- 为什么比较运算符如此快速
- 布尔比较运算符是如何在C++中工作的
- 关于 std::min, std::max 中的比较运算符的混淆
- 三向比较运算符成员与非成员实现
- 标准::可选枚举的比较运算符
- C++分数混合比较运算符错误
- 不能将重载比较运算符与 Catch 测试一起使用
- 重构使用动态强制转换的 std::set 的比较运算符
- 为什么我的比较运算符不比较我的点长和双精度值?
- 高效简单的结构比较运算符
- 如何实现 Boost.Hana 结构的相等比较运算符?
- 为什么sub_match和basic_string比较运算符使用额外的字符串副本实现?
- 是否可以在C++中使用三元运算符在 if 语句中选择比较运算符?
- 在priority_queue的自定义类中重载比较运算符
- 为什么C++容器之间存在比较运算符
- 尝试使用比较运算符对对象向量进行排序
- C++复合逻辑运算符不使用比较运算符
- C++:比较运算符>和字符串文本的意外结果
- 重载对象成员的比较运算符
- 比较运算符==中的对象指针