2016-10-03 6 views
0

- iは平方根関数で何をしますか?このような(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; 
} 

(4行目)この--i部分は何をするのでしょうか?

これはうまく動作し、入力24では4.898980となります。しかし、--iをちょうどと置き換えた場合、の結果は5.000000になります。また、i_を使用した場合、再度4.898980となります。だから、その意味は--i = i--?フードの下で何が起こっていますか?

また、iが整数部分で既に行われているため、ここでは十分ではないという理由で論理を得ることはできません。私は初心者です。助けてください?

+2

'--i'と' i - 'の意味は、基本的なテキストブックやウェブ上での検索で見つけることができます。 –

+0

シーケンスポイント( ' - 'の直後の ';')の後に 'i'は' i - 'と' --i'の両方に同じ値を持ちます。 –

+0

他の場所と同じことが、同じ機能を果たします。それはプリデクリメント操作です。 –

答えて

2

これは「ステップバック」です。あなたは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に近いまでそのように動作します。

+0

今すぐクリアしてください。ありがとう! –