﻿# V3521\. AUTOSAR\. The loop counter should not have floating\-point type\.

Данное диагностическое правило основано на руководстве [AUTOSAR](https://www.autosar.org/) \(AUTomotive Open System ARchitecture\) по разработке программного обеспечения\.

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

Рассмотрим пример: 

```cpp
void foo(void) {
  for (float A = 0.1f; A <= 10.0f; A += 0.1f) {
    ....
  }
}
```

Количество итераций в этом цикле может быть 99 или 100\. Точность операций с вещественными числами может зависеть от компилятора, режима оптимизации и многого другого\.

Лучше переписать цикл следующим образом:

```cpp
void foo(void) {
  for (int count = 1; count <= 100; ++count) {
    float A = count / 10.0f;
  }
}
```

Этот цикл выполнит ровно 100 итераций, а переменную 'A' можно использовать для необходимых вычислений\.