【发布时间】:2021-02-22 17:02:23
【问题描述】:
我用 C 语言编写了一个程序,它用heron procedure 为我计算平方根。 x 是我的号码,r 是估计值,steps 是步骤。我想输出精确值和苍鹭方法得到的值之间的差异。但似乎我的功能不正确。对于我的计算值,我没有得到任何价值。谁能帮帮我?
#include <stdio.h>
#include <math.h>
int heron (x, r, steps)
{
int k = 0;
double xold, xnew;
double rel_error = 1.0;
while(k <= steps && rel_error > 1e-4) {
++k;
xnew = .5 * (xold + x / xold);
rel_error = (xnew - xold) / xnew;
if(rel_error < 0)
rel_error = -rel_error;
xold = xnew;
}
printf("exact value: %.10f\n", sqrt(x));
return (xnew);
}
int main()
{
int x=4, r=10, steps=50;
printf("%f\n", heron(x, r, steps));
return 0;
}
【问题讨论】:
-
But it seems that my function is not correct你能扩展一下吗? -
嗯,它返回(并打印两次)
sqrt(x)的值,而不是计算出来的值。 -
打开编译器警告并将其视为错误。这在多个方面都被打破了。未初始化的
xold和错误的返回类型(应该是double,而不是int)等等。 -
For my calculated value i get no value这是什么意思?什么变量保存了您的计算值,它“没有值”意味着什么? -
您的
printf语句需要一个浮点数 -"%f\n"- 但heron返回一个int。似乎这可能是一个因素。
标签: c algorithm square-root