84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
用JS写一个网页计算器,想问一下怎么写开方这一运算,如果用JS内置的运算 sqrt(x),算出来的数不精确,有没有精确运算的思路,可以算出类似2√3这样的。
业精于勤,荒于嬉;行成于思,毁于随。
你想要多精确?小数点后几位?从数值计算的角度来看,可以用牛顿迭代法,设f(x)=x^2-c=0是要求解的方程。那么方程f(x)的根的近似值可以用以下迭代式来求解x[n+1]=x[n]-f(x[n])/f'(x[n]);其中f'(x)=2x,所以那个迭代式就可化为 x[n+1]=x[n]-(x[n]^2-c)/(2x[n])=(x[n]+c/x[n])/2。当x[n+1]-x[n]小于指定的精度以后x[n+1]就是方程的解了~这个方法对于x[0]的选择比较敏感,越接近于真实的根越好。建议你先调用js的sqrt作为方程初始值x[0]。那么问题来了,一般来说js自带的sqrt方法精度应该不至于差到哪去,题主想要更高精度的话就要用字符串来代替js自带的number来达到更高的精度。这里楼主就要自己实现字符串的加以及除(实现除法运算要先实现减法运算)两种运算。这里要注意的是,根据楼主对最后计算精度的要求,除法运算应该保留更多的位数。如果题主觉得我写的不够清楚可以自行百度:牛顿迭代法以及大数除法。个人感觉这两个是解决这个问题的核心。
算开方?只能给题主点建议
1.把质数的完全平方,生成一个表,至于多大,就看需要了,当然如果追求性能的话,可以不选择质数
2.数字输入时,先查表,如果有直接返回,如果没有则进行因式分解
3.因式分解之后,合并同类
4.合成结果
你想要多精确?小数点后几位?
从数值计算的角度来看,可以用牛顿迭代法,设f(x)=x^2-c=0是要求解的方程。那么方程f(x)的根的近似值可以用以下迭代式来求解x[n+1]=x[n]-f(x[n])/f'(x[n]);
其中f'(x)=2x,所以那个迭代式就可化为 x[n+1]=x[n]-(x[n]^2-c)/(2x[n])=(x[n]+c/x[n])/2。
当x[n+1]-x[n]小于指定的精度以后x[n+1]就是方程的解了~这个方法对于x[0]的选择比较敏感,越接近于真实的根越好。建议你先调用js的sqrt作为方程初始值x[0]。那么问题来了,一般来说js自带的sqrt方法精度应该不至于差到哪去,题主想要更高精度的话就要用字符串来代替js自带的number来达到更高的精度。这里楼主就要自己实现字符串的加以及除(实现除法运算要先实现减法运算)两种运算。这里要注意的是,根据楼主对最后计算精度的要求,除法运算应该保留更多的位数。
如果题主觉得我写的不够清楚可以自行百度:牛顿迭代法以及大数除法。个人感觉这两个是解决这个问题的核心。
算开方?只能给题主点建议
1.把质数的完全平方,生成一个表,至于多大,就看需要了,当然如果追求性能的话,可以不选择质数
2.数字输入时,先查表,如果有直接返回,如果没有则进行因式分解
3.因式分解之后,合并同类
4.合成结果