• sqrt函数的实现


    sqrt函数用来求平方根的函数,本篇文章介绍普通的二分法求解和sqrt实现的牛顿迭代法求解这两种方法;

    二分法

    1. 确定待求解的区间,假设待求解的值x所在的区间为[a,b]。
    2. 计算中间点c = (a + b) / 2,判断f©是否等于0,若等于0,则c就是方程的解;否则判断f©的符号。
    3. 如果f© > 0,说明待求解的值x在区间(a,c)内,将区间缩小为[a,c];如果f© <0,说明待求解的值x在区间(c,b)内,将区间缩小为[c,b]。
    4. 重复执行步骤2和步骤3,直到找到满足精度要求的近似解或达到最大迭代次数为止。
    #include 
    #include 
    
    double mySqrt(double x) {
        double left = 0, right = x; // 初始区间为[0,x]
        double eps = 1e-10; // 精度要求为10位小数
        while (right - left > eps) { // 精度要求为10位小数
            double mid = (left + right) / 2; // 取中间点
            if (mid * mid > x) { // 如果mid的平方大于x,说明待求解的值在左半边
                right = mid; // 缩小区间为[left,mid]
            } else { // 否则说明待求解的值在右半边
                left = mid; // 缩小区间为[mid,right]
            }
        }
        return (left + right) / 2; // 返回近似解
    }
    
    int main() {
        double x;
        std::cout << "请输入一个正数:";
        std::cin >> x;
        printf("该数的平方根为:%.10lf\n", mySqrt(x));
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    牛顿迭代法

    牛顿迭代法是一种求解方程根的方法,其基本思想是通过迭代公式不断逼近方程的根。对于求解平方根的问题,我们可以将其转化为求解x^2 - a = 0的根,其中a为给定的数。迭代公式为:x{n+1} = (x+ a / x) / 2。

    #include 
    #include 
    
    double sqrt_newton(double x) {
        double guess = x; // 猜测x的平方根答案 
        double precision = 1e-10; // 设定精度为10位
        double diff = std::abs(guess * guess - x); // 记录迭代过程中的差值
    
        while (diff > precision) {
            guess = (guess + x / guess) / 2; // 迭代公式
            diff = std::abs(guess * guess - x); // 计算误差
        }
    
        return guess;
    }
    
    int main() {
        double x;
        std::cout << "请输入一个数:";
        std::cin >> x;
    
        double result = sqrt_newton(x);
        printf("%.10lf\n", result);
        double result2 = sqrt(2);
    	printf("%.10lf\n", result2);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    前端开发工作中可能会遇到的问题及解决方法
    网络空间开源威胁情报分析的人机优化策略研究
    【元宇宙欧米说】数藏的社交与艺术收藏价值探讨
    HTML5:七天学会基础动画网页(end)
    王道22数据结构课后习题(第二章2.2.3)
    at编译环境搭建-win
    芯科科技第二代平台的所有蓝牙片上系统均可支持蓝牙技术联盟的新功能和新标准
    Spring的启动扩展点机制详解
    Redis未授权访问漏洞复现
    Burp Suite Extension Development Guide
  • 原文地址:https://blog.csdn.net/BinBinCome/article/details/133693144