c - --i 在平方根函数中做什么?

标签 c function loops for-loop

<分区>

在像这样的平方根函数(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 在这里是不够的,因为我们已经完成了整数部分。我是新手。请帮忙?

最佳答案

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

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

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

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

将后退一步,有效运行为

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

然后慢慢提高到接近 7.07.... 在精度允许的情况下。

关于c - --i 在平方根函数中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39840038/

相关文章:

JavaScript 数组比较函数

java - java中如何限制用户输入一定范围内的数字?

function - 在go函数中将函数作为参数传递

javascript - 函数的输出 = NAN

c - 你如何使用 C 确定数字的二进制表示中是否有偶数 1?

c - 链接列表创建 - 程序在接受输入后停止工作

java - 打印 3D 数组转换为 2D

python - 在 python 中嵌套数值积分

c - 如果已经设置了警报, alarm() 的返回值是多少

c - C 中字母的大小写反转