为什么这个 C 函数(求 n 的平方根的牛顿拉夫逊法)不能正常工作?

why this C function (newton raphson method for square root of n) doesnt work correctly?

我正在编写代码以使用 Newton–Raphson 法计算数字的平方根,但无法获得正确的输出。

当我 运行 使用任何输入此代码时,我得到的结果是 0.000003,没有任何错误或警报。

当我将所有 double 关键字更改为 float 时,它可以正常工作。

double square(double  n)
{
    register int i;
    double  x = 0.1;
    for (i = 1; i <= 15; i++)
        x -= ((x * x - n) / (2 * x));
    return x;
}

int main()
{
    double  n;
    system("cls");
    printf("enter a num : ");
    scanf("%f",&n);
    printf("\n square is : %f",square(n));
    getch();
    return 0;
}
double n;
scanf("%f",&n);

这要求 scanf 读取一个 float 并将其放入为 double 保留的 space 中。
不要那样做

要么要求一个浮点数为一个space预留一个浮点数

float n;
if (scanf("%f", &n) != 1) /* error */;

或要求双人间 space 预留给双人间

double n;
if (scanf("%lf", &n) != 1) /* error */;

这是因为 scanf 中 double 的格式说明符是“%lf”。您使用了仅适用于浮点数的“%f”。因此你得到未定义的输出。

当我编译你的代码时,我遇到了以下编译器警告。

src\main.c:50:13: warning: format '%f' expects argument of type 'float *', but 
argument 2 has type 'double *' [-Wformat=]     
    scanf("%f",&n);
           ~^  ~~
            %lf

以下代码适用于 double。

int main() {
        double n;
        system("cls");
        printf("enter a num : ");
        scanf("%lf", &n);
        printf("\n square is : %f", square(n));
        getch();
        return 0;
}

结果是:

enter a num : 2

 square is : 1.414214

希望对您有所帮助。