2017-11-11 3 views
4

私はこのようなループを持ち、stepが(0; 1)のときは無限になります。ステップが[1; ..]の場合はうまく動作します。なぜthis forループが無限ですか?

public interface FindMinI { 
double function(double x); 

static double findMinOfFuncOnInterval(int begin, int end, double step, FindMinI func) 
{ 
    double min = Double.MAX_VALUE; 

    for (int i = begin; i <= end ; i += step) { 

     if(func.function(i) <= min) 
      min = func.function(i); 

    } 
    return min; 
} 

}

+1

ステップが「0」の場合、どのように終了しますか? –

+1

「0」と「1」の間に*整数*の値を持つ方法はありますか? –

+1

stepが '[0; 1]であるということは、ステップではなく整数で試すことを意味しますか? – game0ver

答えて

4

あなたはこの(0,1)間のステップにしようとした場合は、あなたが無限ループにつながるすべての反復でi0を追加し、結果として、intにキャストされます!

1

stepがであるならば、私はをゼロを追加すると、何もしないだろうので、それは無限になります。増分は無限ループを意味しません。 iへの追加時

+0

どちらかのステップが0または0.001または0.5の場合、ループは無限になります – RaiseLtwiCe

+2

@RaiseLtwiCeもう一度、*を整数として使用できますか? '0.5'を' int'値に変換するとどうなりますか? –

1

ステップが0の場合は、値に何も追加されていないことを意味する0をiに追加していて、無限になってしまいます。

stepをdoubleとして指定するので、0.0001のような値が可能です。ただし、iは整数であるため、doubleからint、および0.0001 - > 0に変換されます.1より小さく0より大きい値を整数としてキャストすると、0になります。

iを変更します。 doubleで、10進値を使用してインクリメントすることができます。

また、

をあなたはintstepを変更することができていますが、その場合には小数点以下の手順を使用することはできません似たような状況は、二重の一例を示すために除算または乗算で見つけることができます:

(int) (500 * 0.0001) -> 0.05 as an integer = 0 

したがって、整数に10進値(排他的に10進値)を含む2つのステップを追加すると、0になり、に0が追加され、無限になります。

+1

@Aominèかもしれませんが、もしOPが小数点を増やしたいならば、それをdouble(またはfloat)に変更することが唯一の方法です – Zoe

関連する問題