search

Home  >  Q&A  >  body text

html - 关于javascript写计算器

用JS写一个网页计算器,想问一下怎么写开方这一运算,如果用JS内置的运算 sqrt(x),算出来的数不精确,有没有精确运算的思路,可以算出类似2√3这样的。

迷茫迷茫2786 days ago965

reply all(2)I'll reply

  • 高洛峰

    高洛峰2017-04-10 16:19:35

    你想要多精确?小数点后几位?
    从数值计算的角度来看,可以用牛顿迭代法,设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来达到更高的精度。这里楼主就要自己实现字符串的加以及除(实现除法运算要先实现减法运算)两种运算。这里要注意的是,根据楼主对最后计算精度的要求,除法运算应该保留更多的位数。
    如果题主觉得我写的不够清楚可以自行百度:牛顿迭代法以及大数除法。个人感觉这两个是解决这个问题的核心。

    reply
    0
  • PHPz

    PHPz2017-04-10 16:19:35

    算开方?只能给题主点建议

    1.把质数的完全平方,生成一个表,至于多大,就看需要了,当然如果追求性能的话,可以不选择质数

    2.数字输入时,先查表,如果有直接返回,如果没有则进行因式分解

    3.因式分解之后,合并同类

    4.合成结果

    reply
    0
  • Cancelreply