【发布时间】:2014-07-04 03:22:11
【问题描述】:
我正在尝试评估 a^n,其中 a 和 n 是有理数。
我不想使用任何预定义的函数,例如 sqrt() 或 pow()
所以我尝试使用牛顿法来得到一个近似解:
3^0.2 = 3^(1/5) ,所以如果 x = 3^0.2,x^5 = 3。
可能是解决这个问题的最佳方法(没有计算器但仍然 使用基本算术运算)就是使用“牛顿法”。 牛顿求解方程 f(x)= 0 的方法是建立一个 通过将 x0 作为一些初始“猜测”定义的数字序列 xn 然后 xn+1= xn- f(xn/f '(xn) 其中 f '(x) 是 f 的导数。
该方法的问题在于,如果我想计算5.2^0.33333,我需要找到这个方程x^10000 - 5.2^33333 = 0 的根。我最终得到了巨大的数字,并且大部分时间都得到inf 和nan 错误。
有人可以就如何解决这个问题给我建议吗?或者,有人可以提供另一种算法来计算 a^n 吗?
【问题讨论】:
-
您是否有不想使用标准数学函数的原因?任何其他方法都可能会相当慢且不太精确。
-
@R.. 这样做没有充分的理由。我只是玩得开心,看看我能做什么。这不是家庭作业或其他东西。我大学毕业了,编程是一种爱好。但我可以想,如果我正在编写一个原始微控制器,它可能没有这些功能。
-
你是怎么想到
3.2 = 3^(1/5)的? -
@RSahu 这是一个错误,现在更正了。
-
求值 5.2^0.001 表示求解 x^1000 = 5.2。然后 t1 = x^3 给你 5.2^0.003。 t2 = t1^10 = x^30 给你 5.2^0.03。 t3 = t2^10 = x^300 给你 5.2^0.3。最后 t1*t2*t3 给你 5.2^0.333。这听起来像 x^333。
标签: c newtons-method exponent