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

标签 c newtons-method square-root sqrt

我正在编写代码以使用 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 保留的空间中。
不要那样做

要么要求float换一个为float预留的空间

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

或者要求双人间以获得为双人间预留的空间

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

关于c - 为什么这个 C 函数(求 n 的平方根的牛顿拉夫逊法)不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57035800/

相关文章:

c - 为什么我无法从我写入文本的文件中读取数据。 C

python - 牛顿法 : order of statements in loop

java - java上牛顿法实例讲解

minimization - 如何使用牛顿法找到非线性多元函数的最小值(代码不是线性代数)

c++ - 在 C/C++ 中将 1 个月添加到 time_t 的简单方法

c - 构建一个带有一些内核内存泄露的应用程序

c - #define变量的用法

java - 计算整数数组元素的平方根时的 Arrays.asList 问题

swift - 简单的平方根循环

java - 对于 int 参数,Math.sqrt 的数学结果是否正确?