为什么这个 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
希望对您有所帮助。
我正在编写代码以使用 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
希望对您有所帮助。