⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsqrt.c

📁 The art and science of c_source code!
💻 C
字号:
/* * File: tsqrt.c * ------------- * This program calculates the square root function * using the Taylor series expansion. */#include <stdio.h>#include <float.h>#include <math.h>#include "genlib.h"/* Function prototypes */void TestSqrt(double x);double Sqrt(double x);double TSqrt(double x);/* Main program */main(){    TestSqrt(0.0);    TestSqrt(0.25);    TestSqrt(1);    TestSqrt(2);    TestSqrt(3);    TestSqrt(4);    TestSqrt(49);    TestSqrt(200);    TestSqrt(1.0E10);}/* * Function: TestSqrt * Usage: TestSqrt(x); * ------------------- * Generates a line of the test table. */void TestSqrt(double x){    printf("Sqrt(%g) = %g  sqrt(%g) = %g\n", x, Sqrt(x), x, sqrt(x));}/* * Function: Sqrt * Usage: root = Sqrt(x); * ---------------------- * Returns the square root of x, calculated using a * Taylor series expansion, as described in the text. * The Sqrt function is actually implemented as two * functions.  The job of the outer Sqrt function is to * divide the argument repeatedly by 4 until it is in * the range 0 < x < 2, where the Taylor series converges. * It then calls TSqrt to perform the actual Taylor series * calculation.  When finished, Sqrt adjusts the answer by * multiplying the result by 2 for each time it needed to * be divided by 4 to bring it in range. */double Sqrt(double x){    double result, correction;    if (x == 0) return (0);    if (x < 0) Error("Sqrt called with negative argument %g", x);    correction = 1;    while (x >= 2) {        x /= 4;        correction *= 2;    }    return (TSqrt(x) * correction);}/* * Function: TSqrt * Usage: root = TSqrt(x); * ----------------------- * Returns the square root of x, calculated by expanding * the Taylor series around a = 1, as described in the * text.  The function is effective only if x is in the * range 0 < x < 2.  Term i in the summation has the form * *                   xpower *       coeff  *  --------- *                 factorial * * where coeff comes from ith derivative of the function, * factorial is i!, and xpower is the ith power of (x - a). * Each of these components is computed from its previous * value. */double TSqrt(double x){    double sum, factorial, coeff, term, xpower;    int i;    factorial = coeff = xpower = 1;    sum = 0;    term = 1;    for (i = 0; sum != sum + term; i++) {        sum += term;        coeff *= (0.5 - i);        xpower *= (x - 1);        factorial *= (i + 1);        term = coeff * xpower / factorial;    }    return (sum);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -