如何在没有math.h的情况下计算第n个根

时间:2015-02-02 03:43:48

标签: c++ math

我必须在没有math.h的情况下创建第n个根 这是我到目前为止所得到的: n√(X)= X ^(1 / n)的

#include <stdio.h>
#include <iostream.h>
#include <windows.h>
int main ()
{
float num1,num2,t; t=1;
cout<<"Type your radicand "; cin>>num1;
cout<<"Type your index "; cin>>num2;

for (int i=0;i<1/num2;i++) //this is the exponent
{t=t*num1;}
cout<<"The answer is= "<<t;
system ("PAUSE");
}

(Borland C ++ 5.5)问题是我找不到办法做x ^(1 / n)

2 个答案:

答案 0 :(得分:1)

最直接的方法可能是使用牛顿法逼近平方根。

http://en.wikipedia.org/wiki/Newton%27s_method

你想要的等式是:
    sqrt(N)= x~ = 1/2 *(N / x + x)

迭代这几次,直到x停止快速变化(从x的猜测开始,如“1/2的N”)。你可以通过比较当前迭代(p)和最后一次迭代(q)的值来做到这一点:

e =(p-q)/ p

一旦e值下降到你选择的“足够接近”的值,你已经到了你的根源!

或者,你可以

答案 1 :(得分:0)

您可以重新设计问题y = sqrt(x),以便找到y的值,使y*y - x等于零。解决这个等式的最简单方法是在yhttp://en.wikipedia.org/wiki/Bisection_method)之间对0和x进行二分(因为0 <= sqrt(x) <= x对于所有实数x其中x应该满足x >= 0)。

或者你可以采用牛顿方法,虽然这稍微提高一点并且不能保证收敛(如果正确的答案在初始区间内,则二分是如此)。