c++ - 整数乘法和除法之间意外的明显性能差异

标签 c++ algorithm optimization

我正在实现一个简单的二进制搜索来查找整数的平方根。代码运行正确。但是如果我将 if 中的条件从 mid * mid > x 更改为 mid > (x/mid) 那么一切都很好。

int sqrt(int x) {
    if(x < 0) return -1;
    if(x <= 1) return x;
    int l,r,mid,ans;
    l = 0;
    r = x;
    while(l <=r ){
        mid = (l + r) / 2;

        if((mid * mid) == x) return mid;

        if((mid * mid) > x ){  //<===== here if I change to mid > (x / mid)
            r = mid - 1;

        }else{
            l = mid + 1;
            ans = mid;
        }
    }

    return ans;
}

};

因此我得出结论,除法比乘法快。但到目前为止,我所做的研究都表明乘法比除法快。

最佳答案

mid > (x / mid) 

优于

(mid * mid) > x

因为你避免了整数溢出。

关于c++ - 整数乘法和除法之间意外的明显性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22956226/

相关文章:

c++ - 更改枚举类型 C++ 的数据大小

java - Java中如何提取一个字符串中的所有整数并转换为指定的char值?

SQL - 优化复杂的分页搜索查询

c - 如何编写包装函数以便编译器有效地优化它?

pointers - 我们是否在 Go 中过度使用了传递指针?

c++ - C++11 段错误中基于范围的 for 循环,但不是常规 for 循环

c++ - c++中面向性能的消息回调解决方案

python - 检测列表中的连续整数

c++ - 链接我的库时未解析的外部符号

algorithm - 数组保持不变的概率是多少?