V3076. Comparison with 'double.NaN' is meaningless. Use 'double.IsNaN()' method instead.


Анализатор обнаружил сравнение переменной типа float или double с float.NaN или double.NaN. В соответствии с документацией, если два значения double.NaN сравниваются с помощью оператора == , то результатом будет false. Таким образом какое бы значение типа double ни сравнивали с double.NaN, в результате всегда будет false.

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

void Func(double d) {
  if (d == double.NaN) {
    ....
  }
}

Проверка на NaN с помощью операторов == и != некорректна. Вместо этого следует использовать методы float.IsNaN() или double.IsNaN(). Исправленный вариант:

void Func(double d) {
  if (double.IsNaN(d)) {
    ....
  }
}

Согласно Common Weakness Enumeration, потенциальные ошибки, найденные с помощью этой диагностики, классифицируются как CWE-570, CWE-571.

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3076.


Найденные ошибки

Проверено проектов
355
Собрано ошибок
13 303

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;