为各种事情实现数学函数非常简单。 int mul(int,int);
,int pow(int,int);
,甚至double div(float,float);
很容易做到,可以用循环或递归实现。 (这些方法与手动或头部执行这些功能的方法相同。)要相乘,只需重复添加数字即可。分割,重复减去它。获得力量,反复倍增。等等。实现根计算功能
然而,我一直想知道的一个数学函数是根。例如,你将如何编写一个函数来计算一个数字的平方(或立方体等)根(即,double root(float num, float root);
)?我试图环顾四周,找不到这样做的算法或方法。
当我尝试手工计算根目录时,我通常使用猜测方法(从一个近似数开始,添加一个分数,乘,看它有多远,添加一个更小的分数,再乘以,再次检查,并重复直到满意)。我认为这可以奏效,但肯定会有更好更快的方法(不管计算机能做多少手动)。
显然,LUT并不相关,因为它必须具有足够的通用性才能接受任何操作数(除非您正在编写一组有限数据的游戏)。 Wikipedia article提到了猜测方法,并列出了一些古代的(早在计算机发明之前)以及一些纯粹的数学甚至微积分方法(包括一些具有“无限”作为组分的方法)。似乎与电子产品有关的唯一一些使用技巧或逻辑运算符。 (这只是为平方根,更不用说立方体根,等等。)
有没有简单的根计算方法?计算器如何做到这一点?电脑如何做到这一点? (不,只是做double pow(a,0.5);
将无法正常工作,因为那么double pow(float,float)
将如何实施?)
我只是错误地将根函数与更简单的函数分组?他们比看起来更复杂吗?
是的,不要通过重复添加来进行乘法或除法。这是非常多尘,但http://moneybender.com/transactor_article.pdf。 – 2013-08-08 20:48:40