首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不使用任何内置函数的情况下找到数字的平方根?

在不使用任何内置函数的情况下找到数字的平方根?
EN

Code Review用户
提问于 2018-11-13 21:04:56
回答 1查看 259关注 0票数 0

我正在处理以下问题:

给定一个整数,如何在不使用任何内置函数的情况下找到该数字的平方根?

代码语言:javascript
复制
  private static double computeSquareRootBinarySearch(double x, double precision) {
    double start = 0;
    double end = x / 2 + 1;
    double mid = (start + ((end - start) / 2));
    double prevMid = 0;
    double diff = Math.abs(mid - prevMid);

    while ((mid * mid != x) && (diff > precision)) {
      if (mid * mid > x) {
        end = mid;
      } else {
        start = mid;
      }
      prevMid = mid;
      mid = (start + end) / 2;
      diff = Math.abs(mid - prevMid);
    }
    return mid;
  }

我想出了上面的二进制搜索算法,但是我想知道在上面的算法中我能做什么优化吗?

EN

回答 1

Code Review用户

发布于 2018-11-13 21:35:16

  • mid * mid不太可能等同于x,因此机会主义的mid * mid != x消耗的周期比它可能节省的要多。我建议完全放弃。
  • 收敛速度不是最好的。您的算法每次迭代增加(大约)一点精度。将其与经典的牛顿-拉夫森( Newton-Raphson )进行比较,后者使每一次迭代的正确位数翻了一番.
  • 正如注释中提到的,在不使用任何内置函数的情况下,使用Math.abs排除了赋值的一部分。
  • 您可能需要检查输入的正确性:xprecision都必须是正的。
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/207592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档