【发布时间】:2017-02-11 21:30:02
【问题描述】:
在像这样的平方根函数(在 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 在这里不够用,因为我们已经完成了整数部分。我是新手。请帮忙?
【问题讨论】:
-
--i和i--的含义可以在任何基本教科书或使用网络搜索找到。 -
在一个序列点之后(即
--i之后的;),i对于i--和--i将具有相同的值。 -
它在该函数中所做的事情与在其他任何地方所做的事情相同。这是一个预减量操作。
-
因为在第一个循环之后
i是1超出范围。因此,第二个循环将其递减,使其处于范围内,因此它可以以更小的增量逐步通过。