﻿# V6108\. Do not use real\-type variables in 'for' loop counters\.

Анализатор обнаружил переменную вещественного типа в качестве счётчика цикла 'for'\. Поскольку числа с плавающей точкой не могут точно отобразить все действительные числа, использование таких переменных в цикле может привести к неожиданным результатам, таким как лишние итерации\.

Рассмотрим подробнее:

```cpp
for (double i = 0.0; i < 1.0; i += 0.1) {
    ....
}
```

Количество итераций в этом цикле будет равно 11 вместо ожидаемых 10\. При выполнении кода без модификатора 'strictfp' в версиях Java ниже 17\-ой результат операций с плавающей точкой может также зависеть от платформы\. Чтобы избежать возможных проблем, следует использовать целочисленный тип для счётчика, а вычисления производить внутри:

```cpp
for (var i = 0; i < 10; i++) {
    double counter = i / 10.0;
    ....
}
```

Дополнительной причиной не использовать действительный тип может быть опасность бесконечного цикла\. В качестве примера — следующий фрагмент:

```cpp
for (float i = 100000000.0f; i <= 100000009.0f; i += 0.5f) {
    ....
}
```

Он возникает из\-за слишком маленького инкремента относительно количества значащих цифр\. Для предотвращения такой ситуации лучше также использовать целочисленный тип счётчика, а во избежание потери точности использовать 'double' для хранения значения:

```cpp
for (var i = 0; i < 19; i++) {
    double value = 100000000.0d + i / 2d;
    ....
}
```