Найти квадратный корень не используя Math и Sqrt - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите найти квадратный корень не используя Math и Sqrt.

Решение задачи: «Найти квадратный корень не используя Math и Sqrt»

textual
Листинг программы
#include <assert.h>
#include <stdio.h>
 
double my_fabs(double x)
{
    return x < 0 ? -x : x;
}
 
double my_sqrt(double x)
{
    assert(x > 0);
 
    static const double eps = 1e-10;
    
    double prev;
    double next = x;
 
    do
    {
        prev = next;
        next = (prev + x / prev) / 2;
    }
    while (my_fabs(prev - next) > eps);
 
    return next;
}
 
int main()
{
    printf("sqrt(1e-5) = %lf\n", my_sqrt(1e-5));
    printf("sqrt(1) = %lf\n", my_sqrt(1));
    printf("sqrt(2) = %lf\n", my_sqrt(2));
 
    return 0;
}

Объяснение кода листинга программы

  1. В функции my_sqrt(double x) представлен алгоритм вычисления квадратного корня без использования функций Math.h и Sqrt.
  2. Алгоритм основан на итерационном методе под названием метод Ньютона.
  3. В первой строке функции проверяется, что x > 0, чтобы избежать деления на ноль.
  4. Вторая строка определяет константу eps, которая используется для контроля за точностью вычислений.
  5. Третья строка объявляет две переменные, prev и next, которые используются для хранения предыдущего и текущего приближений к корню.
  6. Четвертая строка инициализирует переменную next значением x.
  7. Пятая строка начинает цикл do-while, который продолжается, пока изменение между prev и next больше eps.
  8. Внутри цикла, prev присваивается значение next, а next вычисляется как среднее значение между prev и x/prev.
  9. Цикл продолжается до тех пор, пока изменение между prev и next не станет меньше eps.
  10. Функция возвращает значение next, которое является окончательным приближением к корню.
  11. В функции main() выполняются тестовые вычисления для проверки функции my_sqrt().
  12. Вывод показывает результаты вычисления функции my_sqrt() для x = 1e-5, 1 и 2.
  13. Значения 1e-5 и 1 выбраны для демонстрации работы алгоритма на значениях, близких к нулю и единице.
  14. Значение 2 выбрано как простое число, для которого легко вычислить квадратный корень вручную.
  15. Функция my_sqrt() должна давать точные результаты для всех трех значений x.
  16. Функция my_sqrt() может давать неточные результаты для других значений x, если они не являются целыми числами или если они меньше 0.
  17. Для проверки точности вычислений можно добавить дополнительные тесты с другими значениями x.
  18. Если точность вычислений недостаточно хороша, можно попробовать уменьшить значение eps, чтобы увеличить количество итераций в цикле.
  19. Можно добавить дополнительную проверку на NaN или Inf в функцию my_sqrt(), чтобы обработать некорректные входные данные.
  20. Функция my_sqrt() может быть использована в других программах, где требуется вычисление квадратного корня без использования стандартных математических функций.

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы