Один операнд сложения или вычитания поглощен другим операндом
Поглощение операнда плавающего происходит, когда один операнд операции сложения или операции вычитания является всегда незначительно маленьким по сравнению с другим операндом. Поэтому результат операции всегда равен значению большего операнда, сокращая операцию.
Избыточные операции тратят впустую циклы выполнения вашего процессора.
Поглощение операнда плавающего может указать на проблемы проекта в другом месте в коде. Возможно, что разработчик ожидал различную область значений для одного из операндов и не ожидал сокращения операции. Однако область значений операнда отличается от того, что разработчик ожидает из-за проблем в другом месте в коде.
Смотрите, являются ли области значений операнда тем, что вы ожидаете. Чтобы видеть области значений, установите свой курсор на операцию.
Если области значений - то, что вы ожидаете, выравниваете по ширине, почему вы имеете в распоряжении избыточную операцию. Например, код только частично записан, и вы ожидаете другие значения для одного или обоих из операндов из будущего незаписанного кода.
Если вы не можете выровнять по ширине избыточную операцию, удалите ее.
Если области значений не то, что вы ожидаете, в вашем коде, прослеживаете, чтобы видеть, куда области значений прибывают из. Чтобы начать ваш traceback, ищите экземпляры операнда в вашем коде. Просмотрите предыдущие экземпляры операнда и определите, где неожиданная область значений происходит.
Чтобы определить, когда один операнд незначителен по сравнению с другим операндом, дефект использует правила на основе стандартов IEEE® 754. Чтобы зафиксировать дефект, вместо того, чтобы использовать фактические правила, можно использовать эту эвристику: отношение большего к меньшему операнду должно быть меньше, чем 2p-1
, по крайней мере, для некоторых значений. Здесь, p
равен 24 для 32-битной точности и 53 для 64-битной точности. Чтобы определить точность, дефект использует вашу спецификацию для Target processor type (-target)
.
Этот дефект появляется, только если один операнд всегда незначительно меньше, чем другой операнд. Чтобы видеть экземпляры субнормальных операндов или результатов, используйте проверку Subnormal Float в Polyspace® Code Prover™.
Группа: числовой |
Язык: C | C++ |
Значение по умолчанию: на |
Синтаксис командной строки: FLOAT_ABSORPTION |
Влияние: высоко |
ID CWE: 189, 682, 873 |