2015-02-02 5 views
-4

я должен сделать п-й корень без math.h Это то, что я до сих пор: n√ (х) = х^(1/п)Как рассчитать корни степени п без math.h

#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) Проблема заключается в том, я не могу найти способ сделать х^(1/п)

+0

''? Какой компилятор вы используете? – PaulMcKenzie

+0

Не будет ли это квадратным числом: 'x^x? ' Затем используйте регулярные +, -,/ –

+0

. Я использую «Borland C++ 5.5» ps. Я привязался к «math.h» в файле include, но не смог найти, как «math.h» делает sqrt. – Hazard

ответ

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).

В качестве альтернативы вы можете прибегнуть к методу Ньютона, хотя это немного более продвинуто и не гарантируется сходимость (в то время как биссекция есть, если правильный ответ лежит в пределах начального интервала).

1

самый простой способ, вероятно, с помощью метода Ньютона для аппроксимации квадратного корня.

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

Уравнение вы хотите:
SQRT (N) = х ~ = 1/2 * (N/х + х)

Итерация это несколько раз, пока х не перестает меняться быстро (начните с предположения для x как «1/2 of N»). Вы можете сделать это путем сравнения значений текущей итерации (р) и последней итерации (д), как это:

е = (рд)/р

После того, как е падает ниже значения, вы выбираете для " достаточно близко ", вы достигли корня вашего корня!

В качестве альтернативы, вы можете

+0

Хорошо, я попробовал ваше уравнение на бумаге; x = 9, n = 2 ---> 0,5 * (2/9 + 9) = 6.75, но sqrt из 9 равно 3 ... Я не понимаю последнюю часть; ¿Было бы похоже на попытку получить производную часть корня и найти самое низкое число? ¿Разве это не слишком долго? – Hazard

+0

Это было бы N = 9, x = 1 (или рассмотрением степеней 2, x = 2 или x = 4 в зависимости от направления округления), а затем (1 + 9/1)/2 = 5, (5 + 9 /5)/2=3.4 и т. Д. – LutzL

Смежные вопросы