Полная версия этой страницы:
Минус ноль
Garoldy
Jul 9 2017, 09:55
Здравствуйте.
Среда Keil v5.13.0.0
Работаю с float на stm32
Результатом умножения нуля на отрицательное значение является минус ноль (80 00 00 00).
В дизассемблерном файле видно что вызывается функция __aeabi_fmul.
Можно ли указать функции что бы она возвращала ноль без знака?
novikovfb
Jul 9 2017, 12:39
"минус ноль" Вы можете получить в результате любых операций. Если нужно проверить результат на ноль - лучше проверять на ноль и минус ноль, вряд ли кто-то будет делать особые функции для исключения результата "минус ноль".
Цитата(novikovfb @ Jul 9 2017, 15:39)

"минус ноль" Вы можете получить в результате любых операций. Если нужно проверить результат на ноль - лучше проверять на ноль и минус ноль, вряд ли кто-то будет делать особые функции для исключения результата "минус ноль".
Неужели проверка "минус ноля" на ноль даст false?
Garoldy
Jul 9 2017, 13:48
Портирую проект с моторолы. Код был написан на одной из первых версий IAR и при работе с float значения -0 никогда не получалось. проверки на это не делали.
С удовольствием закрыл бы вопрос просто проверкой на -0, но в проекте сотни вызовов этой функции. Напрашивается корректировка функции умножения.
В дизассемблере видно что перед тем как вернуть нулевой результат, происходит накладывание маски (and) 0x80 00 00 00. Сейчас разбираюсь как скорректировать стандартную библиотеку для работы с float, что бы маска была 0x00.
BackEnd
Jul 9 2017, 18:01
Цитата(Garoldy @ Jul 9 2017, 13:48)

С удовольствием закрыл бы вопрос просто проверкой на -0
Лучше вообще избегать проверок на равенство величин, а использовать исключительно "больше" или "меньше".
Это характерно для float-величин (использование сравнения).
Для integer, при использовании дополнительного кода, не существует двузначного представления нуля, но это характерно для обратного кода.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.