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