我必须在没有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)
答案 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
等于零。解决这个等式的最简单方法是在y
(http://en.wikipedia.org/wiki/Bisection_method)之间对0和x
进行二分(因为0 <= sqrt(x) <= x
对于所有实数x
其中x
应该满足x >= 0
)。
或者你可以采用牛顿方法,虽然这稍微提高一点并且不能保证收敛(如果正确的答案在初始区间内,则二分是如此)。