Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-ноя-24 06:33

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Типы данных
СообщениеДобавлено: 2015-июл-06 12:53 
Не в сети

Зарегистрирован: 2015-янв-22 09:49
Сообщения: 22
Здравствуйте. Работаю с программой CodeMaster. На днях столкнулся с такой проблемой: при вычислении выражения типа a = b*57.3 (b=3.59539e+306) в окне переменных отображается значение +NAN. Сначала переменная а имела тип double, затем, поняв что значение выходит за рамки допустимого диапазона поменял тип на long double, проблема не решилась.В справке для тип double и long double указан один и тот же диапазон, соответствующий типу double.
Подскажите пожалуйста как можно выйти из данной ситуации. И вообще может ли CodeMaster работать с такими числами?
Заранее спасибо.

_________________
Лишь тот во всеоружии, кто в совершенстве владеет оружием.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-06 15:16 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 379
Цитата:
Подскажите пожалуйста как можно выйти из данной ситуации.

1. Поработать с данными, чтобы они влазили в рабочий диапазон
Поскольку при таких порядка точность все равно теряется, то можно представить число как (b = 3.59539 * 10^p; p = 306;)
a = b*57.3; // помним что 10^p вынесено за скобки.
2. Написать собственную математику по обработке таких больших чисел (используя вышеприведенный способ). Например описав числа как структуру. Вроде
struct MyBigDouble{
double Mantisse; // мантисса числа
int Power; // порядок числа
};
соответственно нужны будут функции умножения (порядки складываются), деления (порядки вычитаются), сложение, вычитание(порядки приводятся к единому значению или при большой разнице порядков маленькое число отбрасывается).
Как то так наверное.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-07 09:28 
Не в сети

Зарегистрирован: 2015-янв-22 09:49
Сообщения: 22
Спасибо. Понял в каком направлении действовать.
Позвольте ещё один вопрос. При вычислении выражения типа а =0*1*0.001 получаем результат 3.59539е+306. Что это может быть за глюк?

_________________
Лишь тот во всеоружии, кто в совершенстве владеет оружием.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-07 09:50 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 379
Цитата:
При вычислении выражения типа а =0*1*0.001 получаем результат 3.59539е+306. Что это может быть за глюк?

либо ошибка в библиотеке, либо неверное преобразование типов. Оба варианта маловероятны, поскольку всплыли бы очень быстро.
Возможно также что неверно интерпретируются данные. Например, если а объявлено как double, а в отладчике отображается как float (или наоборот). Можно посмотреть память и расписать данные согласно стандарту.
Попробуйте обратиться в техподдержку.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Последний раз редактировалось редактор 2015-июл-07 09:55, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-07 09:55 
Не в сети

Зарегистрирован: 2015-янв-22 09:49
Сообщения: 22
Спасибо за советы

_________________
Лишь тот во всеоружии, кто в совершенстве владеет оружием.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-07 10:32 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1012
Откуда: Тула
Казалось бы, ан нет http://habrahabr.ru/post/258483/

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-07 11:52 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 379
Цитата:
Казалось бы, ан нет http://habrahabr.ru/post/258483/

Действительно все не так просто, как кажется на первый взгляд.
Привычка работать с целыми числами дает о себе знать.
С другой стороны, редкое использование плавучки пока не выводило на какие то эксцессы.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-07 12:19 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1012
Откуда: Тула
Да спору нет. Тут работает закон 80/20 в каком то смысле - в абсолютном большинстве задач достаточно плавучки. Но людям, у которых встречаются числа в 306й степени было бы не плохо быть в курсе, что плавучка не панацея и вполне себе имеет ограничения.

А глюк видимо всё же есть. Надо сделать тестовый проект.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-07 12:41 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 379
Цитата:
Но людям, у которых встречаются числа в 306й степени было бы не плохо быть в курсе, что плавучка не панацея и вполне себе имеет ограничения.

Просто надо заранее определится с диапазоном входных данных и необходимой точностью расчетов.

Однако это никак не объясняет
Цитата:
а =0*1*0.001 = 3.59539е+306.

Я бы попробовал сперва посмотреть память согласно формату записи числа. Может в рассчетах все правильно, а отображение данных хромает.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-07 12:54 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1012
Откуда: Тула
Код:
столкнулся с такой проблемой: при вычислении выражения типа a = b*57.3 (b=3.59539e+306) в окне переменных отображается значение +NAN.

вообще, конечно, не плохо бы было увидеть хотя бы битмап памяти, где число расположено, поскольку вика говорит, что +нан быть не может https://ru.wikipedia.org/wiki/Число_двойной_точности

На счёт 0,1*0,001 предпологаю KIA упростил...

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-08 14:02 
Не в сети

Зарегистрирован: 2015-янв-22 09:49
Сообщения: 22
prostoRoman писал(а):
На счёт 0,1*0,001 предпологаю KIA упростил...


В том то и дело что не упрощал, пробовал вычислять именно этот кусок в отдельном проекте - результат такой же. Впрочем по этому поводу уже написал разработчикам.

prostoRoman писал(а):
Может в рассчетах все правильно, а отображение данных хромает


Я думаю, что если бы расчёты были правильны, то в CAN и UART выдавалось бы число хоть как-то похожее на правду, а тут передаётся такая же ерунда.

_________________
Лишь тот во всеоружии, кто в совершенстве владеет оружием.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-14 14:23 
Не в сети
Moderator

Зарегистрирован: 2015-июл-09 15:09
Сообщения: 10
Откуда: ООО "Ангиоскан-Электроникс"
Здравствуйте.

Я ответил на Ваше письмо. Продублирую мой ответ тут.
В присланном Вами проекте ошибка возникает не при умножении, а при делении -0 на константу или переменную.
Это ошибка в библиотечной функции. К этому сообщению прилагается архив с патчем для библиотеки.
Архив содержит два каталога: “Inc” и “Lib”. Содержимое этих каталогов нужно скопировать в соответствующие подкаталоги каталога "CMC-ARM".


Вложения:
LibPatch-150714.zip [1.55 МБ]
Скачиваний: 127
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Типы данных
СообщениеДобавлено: 2015-июл-21 12:30 
Не в сети

Зарегистрирован: 2015-янв-22 09:49
Сообщения: 22
Спасибо. Библиотеки помогли

_________________
Лишь тот во всеоружии, кто в совершенстве владеет оружием.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB