python的根号函数,python求一个数的根号怎么做
本系列主要用Python实现,主要展示计算机的基本数学运算是如何实现的。对于Python来说,数学的底层应该是用C写的,所以直接在数据库里找不到源代码。所有内容都是参考资料,不一定是最高效的,但我们会尽力找到最高效的代码。
下面是根号运算。数学公式采用牛顿迭代法,其中迭代条件为精度,可根据需要修改。不需要太多时间就能大幅提高精度。
def sqrt(x):val=x last=0.0 while(ABS(val-last)0.0000001):last=val val val=(val x/val)/2 returnval当多个根运算n=2时,以下等价于以上,并且可以是小数。当n=1/a时,这种方法等价于x。
My sqrt1 (x,n):val=x last=0.0 while(ABS(val-last)0.0000001):last=val val=((n-1)* val x/val * *(n-1))/n返回val测试
print(1.6**3)print(mysqrt1(1.6,1/3))print(mypow(1.6,3))print(1.6 * * 0.25)print(mysqrt 1(1.6,4))
结果
4.096000000000001
4.096000000000004
4.096000000000004
1.1246826503806981
1.1246826503806981
完成后
Epsilon=10e-16def fab_h(x): 现实数绝对值:param x: r 如果x=0:return x else:return x *-1 defsqrt _ h(x, n=2.0): n次根号下的X牛顿迭代法 val=x last=0.0如果n==2.0:while(fab _ h(val-last)epsilon):last=val val=(val X/val)/2 return val while(fab _ h(val-last)epsilon):last=val=((n-1)* val X/val * *(n-1))/n return val总结:这是一种相当快的运算方法,只有经过几次迭代才能达到相当的精度。 例如,上述8位精度可以通过五次迭代来计算。
但可以看出,开根运算相当于幂运算的逆运算,x 1/4=x开平方根4次。对于上面的运算,实际上是引用了X ^ N方法,只有根运算是独立的,其他的都可以用X ^ N方法代替。这里可以发现,各种数学公式其实是有联系的。
下面是C语音的另一个根号实现,来自雷神之锤3D引擎的源代码。是目前最快的根号算法实现。由于C语言的指针特性,我无法用python实现,所以直接贴了源代码。最重要的是不知道常数0x5f375a86是怎么来的。不得不说,数学的顶端是玄学。
float InvSqrt(float x){ float xhalf=0.5f * x;int I=*(int *)x;//获取浮点值i=0x5f375a86- (i1)的位;//给出初始猜测y0x=*(float *)I;//将位转换回floatx=x *(1.5f-xhalf * x * x);//牛顿步,重复增加accuracy return x;}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。