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

 
 
> Как определить что float имеет не цифровое значение (NaN)
LeshaL
сообщение Mar 13 2006, 11:03
Сообщение #1


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

Группа: Свой
Сообщений: 166
Регистрация: 14-01-06
Пользователь №: 13 160



В __eeprom обьявлена переменная типа float. Как с минимальными затратами определить, что эта переменная имеет нечисловой формат (когда по адресу хранения float появляется значение 0xFFFFFFFF) чтобы привести ее в какое-нибудь начальное значение числового формата? Операции сравнения не работают. Если я пытаюсь определить нечисловой формат так:
if(my_float==0.NaN),
то, судя по ассемблерному тексту, my_float сравнивается не с 0xFFFFFFFF, a c 0x7FFFFFFF. Если сравниваю так: if(my_float==-0.NaN), то ничего не меняется...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Виктория
сообщение Mar 14 2006, 06:14
Сообщение #2


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Цитата
Цитата
Красиво работает if(my_float==0.NaN), но проверяет только на 0x7FFFFFFF, а в eeprom, сами понимаете, чаще может быть значение 0xFFFFFFFF.


Это не корректно, т.к. NaN - это не только 0x7FFFFFFF.
Т.е. тестировать на NaN через сравнение с константой некорректно.


Некорректность еще и в том, что результат операции сравнения float-оператора с НЕ-числом (это Ваша спец. константа) не дает правильного результата (для этого, т.е. грамотного управления вычислениями эти спец.константы и были введены в соотв. стандарт IEEE). Подробнее все в стандарте и можно посмотреть.
Еще один посыл. Так как сравнение float-чисел выполняется с помощью специальной библиотечной функции, то и сравнение float c NaN необходимо делать аналогично - т.е. с помощью своей функции. Starter48 прав! Можно и на асме эту функцию написать, если захотите большей эффективности.
З.Ы.: а NaN все-таки лучше не допускать в своих алгоритмах, эти константы были введены в стандарт для отладки программ, реализующих численные алгоритмы.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 01:36
Рейтинг@Mail.ru


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