【发布时间】:2026-02-13 13:05:01
【问题描述】:
考虑一下我在 C 中实现巴比伦方法的尝试:
int sqrt3(int x) {
double abs_err = 1.0;
double xold = x;
double xnew = 0;
while(abs_err > 1e-8) {
xnew = (2 * xold + x/(xold* xold))/3;
abs_err= xnew-xold;
if (abs_err < 0) abs_err = -abs_err;
xold=xnew;
}
return xnew;
}
int main() {
int a;
scanf("%d", &a);
printf(" Result is: %f",sqrt3(a));
return 0;
}
结果是 x=27: 0.0000? 我的错在哪里?
【问题讨论】:
-
1/3执行整数(截断)除法,因此结果为0。要么执行1.0/3之类的操作,要么将/3移动到表达式的末尾(因此/的 lhs 是double而不是int)。 -
谢谢:但还是0.0000
-
我写道:xnew=(2 * xold + x/(xold* xold))/3;
-
xalt在哪里声明?全局变量? -
请注意,SO 站点不提供 MathJax,因此它不会解释 LaTeX。顺便说一句,它似乎是一个 cube 根,而不是 sqrt3。
标签: c implementation