zoukankan      html  css  js  c++  java
  • 实现sqrt()函数

     求一个正数N的开方, 并且可以指定精度, 要求不能用库函数sqrt

    方法一:如下所示,先求sqrt(N)的整数部分,再求小数点后1位,2位 ... ...

    方法二:牛顿迭代法,根据公式 Ai+1 = (Ai+number/Ai)/2 ,其中Ai 的初始值,即A1任取,如1,2,3 ...

    // 求一个正数N的开方, 并且可以指定精度, 要求不能用库函数sqrt
    
    #include <stdio.h>
    #include <stdlib.h>
    
    double my_sqrt2(double number, int point)
    {
        double new_guess;
        double last_guess;
    
        if (number < 0) {
            printf("Cannot compute the square root of a negative number!
    ");
            return -1;
        }
    
        printf("Method 2:
    ");
        new_guess = 1;
        do {
            last_guess = new_guess;
            new_guess = (last_guess + number/last_guess) / 2;
            printf("%.*lf
    ", point, new_guess);
        } while (new_guess != last_guess);
    
        return new_guess;
    }
    
    double my_sqrt1(double n, int point)
    {
        if (n < 0) {
            printf("Cannot compute the square root of a negative number!
    ");
            return -1;
        }
    
        int i,j;
        for( i=1; i-n<0; i++ ) // 求得i的开方的整数部分
            if( i*i-n > 0 )
                break;
    
        double answer = i-1;
        double incr = 0.1;
        for( j=1; j<=point; j++) // 第j次循环,求得i的开方的小数部分的第j位
        {
            for( i=1; i<10; i++ )
            {
                answer += incr;
                if( answer*answer-n > 0 )
                    break;
            }
            answer -= incr;
            incr /= 10;
        }
        incr *= 10;
        printf("Method 1:
    ");
        printf("sqrt(%lf) is between %.*lf - %.*lf
    ", n, point, answer, point, answer+incr);
        return answer;
    }
    
    int main(void)
    {
        int point;
        double n;
        printf("请输入正整数N: ");
        scanf("%lf",&n);
        printf("请输入精确到小数点后的位数: ");
        scanf("%d",&point);
    
        my_sqrt1(n,point);
        my_sqrt2(n,point);
    
        return 0;
    }
  • 相关阅读:
    内层城循环应用——买衣服
    内外层循环用法
    自定义函数的应用
    少有人走的路 随笔
    拆单发货逻辑
    拆单发货-分布页
    拆单发货-主页
    SP--report存储过程
    关于C#对Xml数据解析
    C#模拟http 发送post或get请求
  • 原文地址:https://www.cnblogs.com/DayByDay/p/3869065.html
Copyright © 2011-2022 走看看