реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
Garoldy
сообщение Jul 9 2017, 09:55
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 21-11-09
Из: Беларусь, Минск
Пользователь №: 53 770



Здравствуйте.
Среда Keil v5.13.0.0
Работаю с float на stm32
Результатом умножения нуля на отрицательное значение является минус ноль (80 00 00 00).
В дизассемблерном файле видно что вызывается функция __aeabi_fmul.
Можно ли указать функции что бы она возвращала ноль без знака?
Go to the top of the page
 
+Quote Post
novikovfb
сообщение Jul 9 2017, 12:39
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450



"минус ноль" Вы можете получить в результате любых операций. Если нужно проверить результат на ноль - лучше проверять на ноль и минус ноль, вряд ли кто-то будет делать особые функции для исключения результата "минус ноль".
Go to the top of the page
 
+Quote Post
des333
сообщение Jul 9 2017, 13:04
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(novikovfb @ Jul 9 2017, 15:39) *
"минус ноль" Вы можете получить в результате любых операций. Если нужно проверить результат на ноль - лучше проверять на ноль и минус ноль, вряд ли кто-то будет делать особые функции для исключения результата "минус ноль".


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


--------------------
Go to the top of the page
 
+Quote Post
Garoldy
сообщение Jul 9 2017, 13:48
Сообщение #4





Группа: Участник
Сообщений: 13
Регистрация: 21-11-09
Из: Беларусь, Минск
Пользователь №: 53 770



Портирую проект с моторолы. Код был написан на одной из первых версий IAR и при работе с float значения -0 никогда не получалось. проверки на это не делали.
С удовольствием закрыл бы вопрос просто проверкой на -0, но в проекте сотни вызовов этой функции. Напрашивается корректировка функции умножения.
В дизассемблере видно что перед тем как вернуть нулевой результат, происходит накладывание маски (and) 0x80 00 00 00. Сейчас разбираюсь как скорректировать стандартную библиотеку для работы с float, что бы маска была 0x00.
Go to the top of the page
 
+Quote Post
BackEnd
сообщение Jul 9 2017, 18:01
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 201
Регистрация: 28-07-16
Пользователь №: 92 747



Цитата(Garoldy @ Jul 9 2017, 13:48) *
С удовольствием закрыл бы вопрос просто проверкой на -0

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


--------------------
"Классики марксизма говорили, что общественно-экономическая формация меняется с изменением средств производства, которые всегда принадлежали имущему классу.
И сейчас мы находимся в системе координат капитализма, когда самые передовые средства производства принадлежат уже не капиталистам.
Люди, у которых нет обуви, имеют гаджеты. Сейчас создана такая информационная паутина, что вместо коллективного бессознательного можно говорить о коллективном сознании.
Если иметь мозги и гаджеты, можно перевернуть весь мир. Коллективное сознание будет управлять миром! Это исторический путь, который нельзя миновать."
Вячеслав Мальцев
Go to the top of the page
 
+Quote Post
Trump
сообщение Jul 9 2017, 21:15
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 12-05-17
Пользователь №: 97 032



Это характерно для float-величин (использование сравнения).
Для integer, при использовании дополнительного кода, не существует двузначного представления нуля, но это характерно для обратного кода.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 12:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01316 секунд с 7
ELECTRONIX ©2004-2016