2016-10-03 65 views
0

在平方根函數(在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--?發生了什麼?

另外,我不明白爲什麼只是因爲我們已經完成整數部分而不能滿足這裏的要求。我是新手。請幫助?

+2

'--i'和'i - '的含義可以在任何基本的教科書或使用網絡搜索中找到。 –

+0

在序列點(即'--i'後面的';')之後,'i'對於'i - '和'--i'將具有相同的值。 –

+0

它在那個函數中做的和其他地方做的一樣。這是一個預先減量操作。 –

回答

2

這是'倒退',例如,如果你正在做sqrt(50)(7.07 ....)

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

然後i將完成在8但是這顯然是過去在開方值實際上是。所以

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

將移動退一萬步,並有效運行爲

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

,慢慢地工作它的方式,以儘量接近7.07 ....因爲精度將允許。

+0

清除現在。謝謝! –