Jump to content

    

Минус ноль

Здравствуйте.

Среда Keil v5.13.0.0

Работаю с float на stm32

Результатом умножения нуля на отрицательное значение является минус ноль (80 00 00 00).

В дизассемблерном файле видно что вызывается функция __aeabi_fmul.

Можно ли указать функции что бы она возвращала ноль без знака?

Share this post


Link to post
Share on other sites

"минус ноль" Вы можете получить в результате любых операций. Если нужно проверить результат на ноль - лучше проверять на ноль и минус ноль, вряд ли кто-то будет делать особые функции для исключения результата "минус ноль".

Share this post


Link to post
Share on other sites
"минус ноль" Вы можете получить в результате любых операций. Если нужно проверить результат на ноль - лучше проверять на ноль и минус ноль, вряд ли кто-то будет делать особые функции для исключения результата "минус ноль".

 

Неужели проверка "минус ноля" на ноль даст false?

Share this post


Link to post
Share on other sites

Портирую проект с моторолы. Код был написан на одной из первых версий IAR и при работе с float значения -0 никогда не получалось. проверки на это не делали.

С удовольствием закрыл бы вопрос просто проверкой на -0, но в проекте сотни вызовов этой функции. Напрашивается корректировка функции умножения.

В дизассемблере видно что перед тем как вернуть нулевой результат, происходит накладывание маски (and) 0x80 00 00 00. Сейчас разбираюсь как скорректировать стандартную библиотеку для работы с float, что бы маска была 0x00.

Share this post


Link to post
Share on other sites
С удовольствием закрыл бы вопрос просто проверкой на -0

Лучше вообще избегать проверок на равенство величин, а использовать исключительно "больше" или "меньше".

 

Share this post


Link to post
Share on other sites

Это характерно для float-величин (использование сравнения).

Для integer, при использовании дополнительного кода, не существует двузначного представления нуля, но это характерно для обратного кода.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this