Объектное представление значений с плавающей точкой может отличаться (то же самое) для равного (не равный) значения с плавающей точкой
Этот дефект происходит, когда вы сравниваете объектное представление значений с плавающей точкой или объектное представление структур, содержащих члены с плавающей точкой. Когда вы используете функции memcmp
, bcmp
, или wmemcmp
чтобы выполнить сравнение комбинации двоичных разрядов, дефект повышен.
Объектное представление значений с плавающей точкой использует определенные комбинации двоичных разрядов, чтобы закодировать те значения. Значения с плавающей точкой, которые равны, например, -0.0
и 0.0
в стандарте IEC 60559, может иметь различные комбинации двоичных разрядов в их объектном представлении. Точно так же значения с плавающей точкой, которые не равны, могут иметь ту же комбинацию двоичных разрядов в своем объектном представлении.
Когда вы сравниваете структуры, содержащие члены с плавающей точкой, сравниваете элементы структуры индивидуально.
Чтобы сравнить два значения с плавающей точкой, используйте ==
или !=
операторы. Если вы следуете стандарту, который препятствует использованию этих операторов, таких как MISRA®, гарантируйте, что различие между значениями с плавающей точкой в допустимом диапазоне.
Группа: Программирование |
Язык: C | C++ |
Значение по умолчанию: 'off' |
Синтаксис командной строки:
MEMCMP_FLOAT |
Удар: низко |
Find defects (-checkers)
| Floating point comparison with equality operators
| Memory comparison of padding data
| Memory comparison of strings