Наткнулся на интересную задачку. Решил реализовать алгоритм вычисления корня n-ой степени из произвольного положительного числа. Уже приводил возможную реализацию для нахождения квадратного корня. Но в этом случае решение получается более обобщенным. Это первый рабочий алгоритм, написанный на коленке. Нужно еще поразмышлять о сложности и возможностях ускорения.
В данном решении я использую идею относительно неплохого начального приближения. Затем последовательным делением находится второе приближение корня n-ой степени. Далее считается новое приближение с помощью усреднение двух текущих. Последовательно алгоритм сходится к нужному корню с наперед заданной погрешностью. Это немного похоже на метод последовательной релаксации ( численные методы решения ).
📝 Код программы 📄
https://pastebin.com/ztnz7g2E
https://ideone.com/OUEzGA
#include <stdio.h>
double mabs(double x){ return (x < 0)? -x : x; }
int main(void) {
double num = 8;
int rootDegree = 3;
printf("Число а = %f\n", num);
printf("Степень n = %d\n", rootDegree);
double eps = 0.00001;
double root = num / rootDegree;
double rn = num;
int countiter = 0;
while(mabs(root - rn) >= eps){
rn = num;
for(int i = 1; i < rootDegree; i++){
rn = rn / root;
}
root = 0.5 * ( rn + root);
countiter++;
}
printf("root = %f\n", root);
printf("Число итераций = %i\n", countiter);
return 0;
}
#программирование #математика #информатика #численные_методы
👨🏻💻 Репетитор IT men // @mentor_it
