【问题标题】:What does --i do in a square root function? [duplicate]--i 在平方根函数中做了什么? [复制]
【发布时间】: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 在这里不够用,因为我们已经完成了整数部分。我是新手。请帮忙?

【问题讨论】:

  • --ii-- 的含义可以在任何基本教科书或使用网络搜索找到。
  • 在一个序列点之后(即--i 之后的;),i 对于i----i 将具有相同的值。
  • 它在该函数中所做的事情与在其他任何地方所做的事情相同。这是一个预减量操作。
  • 因为在第一个循环之后i1 超出范围。因此,第二个循环将其递减,使其处于范围内,因此它可以以更小的增量逐步通过。

标签: c function loops for-loop


【解决方案1】:

这是一个“后退”,例如如果你在做sqrt(50) (7.07....)

for(i = 1; i*i <=n; ++i);   //Integer part

然后i 将在 8 处结束。但这显然是 sqrt 值实际所在的过去。所以

for(--i; i*i < n; i += precision);  //Fractional part

将后退一步,并有效地运行

for(i=7; i*i < n; i += precision);  //Fractional part

在精度允许的情况下,慢慢达到接近 7.07....。

【讨论】:

  • 现在清除。谢谢!
猜你喜欢
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多