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

 
 
> точность вычислений на Атмега
artic
сообщение Aug 18 2014, 18:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 11-10-06
Пользователь №: 21 205



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

Господа подскажите баг это компилятора или нет.? Если это норма то как повысить точность вычислений? 05.gif
Компилятор CodeVision, Atmega 168

float A=417.60;
float B=0.01;

При просмотре содержимого переменных через AvrStudio имею А=417.60001; В=0.0099999998;

А если числа будут например 17.60 или 0.1 то все гуд.

Для меня эти несоответствия имеют катастрофические последствия. т.к. при дальнейшей обработке погрешность результата
резко возрастает. Обнаружил сие во время реальной работы софта на мк.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
DASM
сообщение Aug 18 2014, 18:23
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Обычная точность для флоат. Ваш компилятор double понимает? Сильно подозреваю, что размер дабла равен размеру флоата у вас.. Тогда прикручивайте внешнюю библиотеку двойной точности, иначе никак, float тут не в помощь. Иногда помогает правильная организация (группировка) вычислений
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Aug 18 2014, 19:09
Сообщение #3


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Ещё можно перейти на вычисления с фиксированной точкой, испольщуя long (например) для хранения и long long перед перемножением.
Какой диапазон чисел в Вашей задаче?
Для сведения, во float на ARM под мантиссу отдано всего 23 бита. 1 бит под знак. 8 под порядок..
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 18 2014, 19:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



не только в АРМ. IEEE754 однако
Go to the top of the page
 
+Quote Post
artic
сообщение Aug 19 2014, 06:49
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 11-10-06
Пользователь №: 21 205



Спасибо . double и float на этом компиляторе одно и тоже. 23 бита маловато будет для мантисы. Попробую организовать вычисления с фиксированной точкой.
Go to the top of the page
 
+Quote Post

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

 


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


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