web-dev-qa-db-ja.com

forループ、倍増

私は問題ではなく、forループを使用したいと思います。以下を行うことは可能ですか?:

for(double i = 0; i < 10.0; i+0.25)

二重値を追加したい。

22
Upvote

浮動小数点演算のアーティファクトに噛まれるのを防ぐために、整数ループ変数を使用して、ループ内で必要な浮動小数点値を導出することができます。

for (int n = 0; n <= 40; n++) {
    double i = 0.25 * n;
    // ...
}
52
rsp

代わりにi += 0.25を使用できます。

27
JamesMLV

ジェームズの答えは最も明白な誤りを捕らえた。しかし、浮動小数点値を(不)等しいかどうか比較してはならないという点で、より微妙な(そしてIMOがより有益な)問題があります。

このループは問題が発生しやすく、整数値のみを使用してループ内のdouble値を計算します。または、あまりエレガントではなく、ある程度のマージンを確保してください:for(double i = 0; i < 9.99; i+=0.25)

編集:0.25 = 1/4は2の累乗であるため、元の比較はうまくいきます。それ以外の場合は、浮動小数点数として正確に表現できない場合があります。 (潜在的な)問題の例:

 for(double i = 0; i < 1.0; i += 0.1) 
     System.out.println(i); 

11個の値を出力します。

0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
9
leonbloy

for (double i = 0f; i < 10.0f; i +=0.25f) {
 System.out.println(i);

fはfloatを示します

追加された=はi = i + 0.25のショートカットを示します。

2
Karthik
for(double i = 0; i < 10.0; i+=0.25) {
//...
}

追加された=は、i = i + 0.25のショートカットを示します。

2
Valchris

整数の場合。以下を使用できます:for (int i = 0; i < a.length; i += 2)

for (int i = 0; i < a.length; i += 2) {
            if (a[i] == a[i + 1]) {
                continue;
            }
            num = a[i];
        }

他のデータ型でも同じようにできます。

0
Nikhil Kumar