|
64-x битный double |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 20)
|
Jan 11 2012, 09:53
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Цитата(Skaf @ Jan 11 2012, 11:33)  64 битные цифры с плавающей точкой- как поступить в данной ситуации? Трактовать данные как массив из четырёх short (или unsigned short). Разобраться где там знак, порядок и мантисса. Выделять их отдельно, и всё ручками преобразовывать к нужному виду.
|
|
|
|
|
Jan 12 2012, 06:23
|

Местный
  
Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940

|
Цитата Вопрос к ТС, ибо если там какие-то коэффициенты аппроксимации присутствуют, например, то из песни слов не выбросишь. Да нет, видимо что-то выбросить можно. Они в этом типе там все гонят. И широту и долготу и высоту и скорость движения и даже время. Меня собственно именно эти поля и интересуют. Цель- получить удобоваримые цифры для отображения на экране через OSD (наложить на аналоговый видеосигнал). Я тут в инете нашел какую-то библиотечку для работы с 64 битным флоатом на АВР. Умеет с ними арифметические действия делать и преобразовывать в 32 бита. Пока не упсел пощупать, но если она нормально заработает- выложу ссылочку.
Сообщение отредактировал Skaf - Jan 12 2012, 06:21
|
|
|
|
|
Jan 12 2012, 10:20
|

Местный
  
Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940

|
Цитата Может всё-таки проще будет переключиться на NMEA протокол? Действительно может. Попробую и так и так.
|
|
|
|
|
Jan 13 2012, 06:13
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Цитата(Skaf @ Jan 12 2012, 09:23)  Я тут в инете нашел какую-то библиотечку для работы с 64 битным флоатом на АВР. Умеет с ними арифметические действия делать и преобразовывать в 32 бита. Можно ссылку?
|
|
|
|
|
Jan 13 2012, 10:52
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(maksimp @ Jan 13 2012, 12:51)  Скорость указанная там интересна - 1000 умножений в секунду или 400 делений в секунду на ATMega32 (16 MHz). Цитата float64_t f_div(float64_t fa, float64_t fb ) /***********************************************************/ { float64_t x;
x=f_inverse(fb); x=f_mult(fa,x); return(x); } А в инверсии - CORDIC ...хм... Интересно вникнуть, кто будет быстрее - прямое деление на асме или тяжелые вычисления на Си. Вообще, на первый взгляд, либа тяжелющщщщая. ЗЫ если быть точнее, то это не CORDIC, только я не знаю, как оно называется
Сообщение отредактировал _Pasha - Jan 13 2012, 10:56
|
|
|
|
|
Jan 13 2012, 15:58
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Цитата(_Pasha @ Jan 13 2012, 14:52)  либа тяжелющщщщая. Посмотрел в дизассемблере. Очень много уходит на копировние 64 битных чисел. По 8 команд, байт за байтом. Вероятно можно заметно уменьшить размер если передавать числа по адресу. Вместо Код float64_t f_div(float64_t fa, float64_t fb ) сделать Код void f_div(float64_t *fa, float64_t *fb, float64_t *fr) // *fr = *fa / *fb и так далее.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|