在平方根函数(C中)中,像这样:
double squareRoot(double n) {
double i, precision = 0.00001;
for(i = 1; i*i <=n; ++i); //Integer part
for(--i; i*i < n; i += precision); //Fractional part
return i;
}
这个 - i 部分(第4行)是做什么的?
它工作正常,对于输入24,它给出了4.898980。但是当 - i 被 i 替换时,结果为5.000000。此外,当使用 i - 时,它再次给出4.898980。那么,这是否意味着 - i = i - ?引擎盖下发生了什么?
另外,我没有理解为什么只有 i 在这里就不够了,因为我们已经完成了整数部分。我是新手。请帮忙吗?
答案 0 :(得分:2)
这是'后退',例如如果你正在做sqrt(50)
(7.07 ......)
for(i = 1; i*i <=n; ++i); //Integer part
然后i
将在8结束。但这显然是PAST,其中sqrt值实际上是。所以
for(--i; i*i < n; i += precision); //Fractional part
将向后移动一步,并有效地以
运行for(i=7; i*i < n; i += precision); //Fractional part
然后慢慢地向上移动到接近7.07 ....正如精度允许的那样。