После объяснения из учебного курса , в котором говорится, что основная c идея состоит в том, чтобы реализовать метод Ньютона-Рафсона для решения нелинейных уравнений, ИМХО, приведенный ниже код отображает этот факт более четко. Поскольку принятый ответ уже есть, я добавляю этот ответ только для справки в будущем.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
double rootCube( double a)
{
double x = a;
double y = 1.0;
const double precision = 0.0000001;
while(fabs(x-y) > precision)
{
x = (x + y) / 2.0;
y = a / x / x;
}
return x;
}
int main(int argc, const char* argv[])
{
if(argc > 1)
{
double a =
strtod(argv[1],NULL);
printf("cubeRoot(%f) = %f\n", a, rootCube(a));
}
return 0;
}
Здесь, в отличие от исходного кода вопроса, более очевидно, что x
и y
- оценки, которые уточняются, пока не будет найдено достаточно точное решение.
При изменении строки в блоке while, где обновляется y, этот код также можно использовать для решения аналогичных уравнений. Например, для нахождения квадрата root эта строка будет выглядеть так: y = a / x
.