美文网首页
聊聊平方根运算的优化

聊聊平方根运算的优化

作者: 80s老人 | 来源:发表于2015-02-07 23:24 被阅读169次

可能有人连平方根是怎么计算的都不知道,我指的是计算机是怎么计算的。
其实有很多种办法都可以计算平方根,我们一般会用#include <math.h>
那库函数用的是哪种算法呢。
用的是牛顿迭代法,什么是牛顿迭代法?看如下算式

newton.PNG

Gn是什么,是上一次的预估,可以证明,当这个计算被不停迭代的话,结果会无限逼近我们想要的那个。
上一个代码实现:

int isqrt(unsigned x) {
  unsigned x1;
  int s, g0, g1;

  if (x <= 1) return x;
  s = 1;
  x1 = x - 1;
  if (x1 > 65535) {s = s + 8; x1 = x1 >> 16;}
  if (x1 > 255)   {s = s + 4; x1 = x1 >> 8;}
  if (x1 > 15)    {s = s + 2; x1 = x1 >> 4;}
  if (x1 > 3)     {s = s + 1;}

  g0 = 1 << s;               // g0 = 2**s.
  g1 = (g0 + (x >> s)) >> 1; // g1 = (g0 + x/g0)/2.

  while (g1 < g0) {          // Do while approximations
     g0 = g1;                // strictly decrease.
     g1 = (g0 + (x/g0)) >> 1;
  }
  return g0;
}

待续...

相关文章

  • 聊聊平方根运算的优化

    可能有人连平方根是怎么计算的都不知道,我指的是计算机是怎么计算的。其实有很多种办法都可以计算平方根,我们一般会用#...

  • 聊聊指数运算的优化

    我并不了解编译器内部怎样运作,但如果编译器不做的话,有些优化就需要程序员有所考量!如果我们要算一个 y=x^13我...

  • 聊聊 autorelease 的优化

    聊聊 autorelease 的优化聊聊 autorelease 的优化

  • Character类、 Math类概述、 Random类、 Sy

    Character类成员方法 Math类概述 Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根...

  • Javascript的位运算

    这里聊聊Javascript的位运算,但是只聊几个(与运算、或运算、否运算)。 可能有人会说:位运算有那么多内容,...

  • Java 计算平方,幂运算,三角函数等

    JAVA中要想计算一个数值的平方根, 可以使用 sqrt 方法: 在 Java 中,没有幂运算, 因此需要借助于 ...

  • letcode[069] x的平方根

    题目地址:x的平方根 思路1:自拟思路——xy** 直接用数学运算符哇! 总结: 刚好能解决用时: 72 ms r...

  • Java Math 类

    Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。Math 的方...

  • JAVA(12)数字

    Math 类封装了常用的数学运算,提供了基本的数学操作,如指数、对数、平方根和三角函数等Math 类位于 java...

  • 优化幂运算

    最近在刷OJ时候发现了一个问题,那就是计算X^62,这是一个很简单的问题,也很容易实现。这个问题有一个很容易的实现...

网友评论

      本文标题:聊聊平方根运算的优化

      本文链接:https://www.haomeiwen.com/subject/cwodxttx.html