前言:笔者在做工程时需要用到大数的开方根运算,但是用的芯片没有FPU,。于是,笔者用移位运算自己实现一个开方根运算,当然可能精度就没有那么准确了。
1. “将长方形变得更像正方形”——牛顿迭代法
查阅了网上很多资料后,发现大多数方法都是通过牛顿迭代法实现。但是鉴于一大堆公式看的头疼(没错我就是个学渣┭┮﹏┭┮),接下来选择一种更常见得方法简单解释——“将长方形变得更像正方形”。
-
假设n是一个要进行开方根运算的数,现在将n看作是一个长方形的面积,假设其长为x,那宽为n/x。
-
当发现x和x/n很不接近后,计算新的x = (x+x/n)/2,另一边长度为n/x,不断逼近一个正方形的形状,达到开方根的目的。
当然,这种方法是通过不断迭代找到最逼近的那个数,当遇到很大的数的时候,探测次数较多,花费时间可能较长,但我的程序要求在4s内跑完,数字也不会很大