цикл for, увеличение в два раза - PullRequest
21 голосов
/ 19 октября 2010

Я хочу использовать цикл for для моей проблемы, а не в то время. Можно ли сделать следующее?

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

Я хочу добавить двойные значения.

Ответы [ 6 ]

52 голосов
/ 19 октября 2010

Чтобы избежать укуса артефактами арифметики с плавающей запятой, вы можете использовать целочисленную переменную цикла и получить нужное значение с плавающей запятой внутри цикла:

for (int n = 0; n <= 40; n++) {
    double i = 0.25 * n;
    // ...
}
27 голосов
/ 19 октября 2010

Вы можете использовать i += 0.25 вместо.

9 голосов
/ 19 октября 2010

Ответ Джеймса уловил самую очевидную ошибку.Но есть более тонкая (и IMO более поучительная) проблема, заключающаяся в том, что значения с плавающей запятой не должны сравниваться для (не) равенства.

Этот цикл подвержен проблемам, используйте только целочисленное значение и вычислите двойноезначение внутри цикла;или, что менее элегантно, дайте себе некоторый запас: 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
2 голосов
/ 17 декабря 2012

В

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

f обозначает float

Добавленный = указывает ярлык для i = i + 0,25;

2 голосов
/ 19 октября 2010
for(double i = 0; i < 10.0; i+=0.25) {
//...
}

Добавленный = обозначает ярлык для i = i + 0,25;

0 голосов
/ 14 апреля 2015

для целых чисел.Мы можем использовать: 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];
        }

Таким же образом мы можем использовать и для других типов данных.

...