|
Математика с float на Cortex-M3. |
|
|
|
 |
Ответов
|
Oct 21 2015, 16:47
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата Выходит, компилятор внутре себя имеет неенку полноценный вычислитель всех стандартных C функций? А float d = sin(M_PI / 8); тоже вычислит? На сколько я знаю, замена функций результатами - поведение не требуемое стандартом. Это я из практики просто знаю. Просто скомпилируйте и посмотрите, должен и sin() оптимизировать. Цитата И не забываем следить стоит ли литера f на конце floatpoint констант. Это сильно влияет на скорость. Впрочем как и на точность ) И вообще я никогда не использую вычисления с плавающей точкой на процессорах без ее аппаратной поддержки. Такие трюки со свёрткой константных выражений хорошо подходят для того чтобы что-то посчиталось с плавающей точкой во время компиляции но на выходе дало int. Если допустить появление плавучки в рантайме - к проекту сразу прилинкуется библиотека эмуляции. Не самая быстрая в любом случае. Так что надо один раз и на всегда освоить fixed point math или использовать процы с аппаратной поддержкой плавучки. P.S. В этом плане С++ с его перегрузкой операторов позволяет писать очень естественный и удобочитаемый код даже при вычислениях с фикс. точкой.. Лично я в начале этого года плотно пересел на плюсы и реализовал свою библиотеку. С фишками С++11 всё что возможно в ней тоже считается на этапе компиляции и я очень доволен! Си теперь кажется чем-то доисторическим))))))
--------------------
The truth is out there...
|
|
|
|
|
Oct 22 2015, 10:56
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (sigmaN @ Oct 21 2015, 22:47)  Если допустить появление плавучки в рантайме - к проекту сразу прилинкуется библиотека эмуляции. Не самая быстрая в любом случае. И что, если это решает задачу? QUOTE (sigmaN @ Oct 21 2015, 22:47)  Так что надо один раз и на всегда освоить fixed point math или использовать процы с аппаратной поддержкой плавучки. Гуд. Вот реальная задача (не выдуманная). Есть некий прибор, который по нажатию кнопки пользователем должен среди всего прочего вычислить некое значение из входного параметра и вывести на индикатор, т.е. время реакции - до 100 мс, чтобы не вызывать дискомфорт. Алгоритм вычисления - простой полином 3-го порядка: y = a3*x^3 + a2*x^2 + a1*x + a0 коэффициенты: a0 = 0.00244813186608 a1 = -2.23013987646e-005 a2 = 4.76311678518e-008 a3 = -6.46053293535e-012 На AVR о 8-ми мегагерцах тактовой оный полином вычисляется за время около 6 или 8 (не помню точно) мс. Плавучка тянет где-то полтора кБ кода. Задача решена (общий размер прошивки ~5 кБ из 8 доступных). Предложите свой вариант решения? И оцените, сколько это потребует времени, и какая сложность реализации по сравнению с этим решением "в лоб"?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
Jenya7 Математика с float на Cortex-M3. Sep 1 2015, 08:42 adnega Цитата(Jenya7 @ Sep 1 2015, 11:42) Если я... Sep 1 2015, 10:55 Jenya7 Цитата(adnega @ Sep 1 2015, 15:55) 1/3.5 ... Sep 1 2015, 11:56  menzoda Если есть FPU, то умножать быстрее будет, иначе то... Sep 1 2015, 12:05  Сергей Борщ Цитата(Jenya7 @ Sep 1 2015, 14:56) что пр... Sep 1 2015, 12:13   zltigo QUOTE (Сергей Борщ @ Sep 1 2015, 15:13) П... Sep 1 2015, 12:18    Jenya7 Цитата(zltigo @ Sep 1 2015, 17:18) Вообще... Sep 1 2015, 12:22     adnega Цитата(Jenya7 @ Sep 1 2015, 15:22) да. за... Sep 1 2015, 13:44      zltigo QUOTE (adnega @ Sep 1 2015, 16:44) Скорее... Sep 1 2015, 14:06       adnega Цитата(zltigo @ Sep 1 2015, 17:06) Часто ... Sep 1 2015, 14:51        Jenya7 Цитата(adnega @ Sep 1 2015, 19:51) А хами... Sep 1 2015, 15:26         adnega Цитата(Jenya7 @ Sep 1 2015, 18:26) помогу... Sep 1 2015, 16:24          Jenya7 Цитата(adnega @ Sep 1 2015, 21:24) Тут вс... Sep 1 2015, 16:37 ЯadiatoR Цитата(adnega @ Sep 1 2015, 13:55) 1/3.5 ... Sep 1 2015, 17:54  adnega Цитата(ЯadiatoR @ Sep 1 2015, 20:54) А ра... Sep 1 2015, 18:04   ViKo Цитата(adnega @ Sep 1 2015, 21:04) Я про ... Sep 2 2015, 05:42    adnega Цитата(ViKo @ Sep 2 2015, 08:42) Поясните... Sep 2 2015, 05:58     ViKo Цитата(adnega @ Sep 2 2015, 08:58) Но опр... Sep 2 2015, 07:47      adnega Цитата(ViKo @ Sep 2 2015, 10:47) Еще раз ... Sep 2 2015, 08:29  jcxz Цитата(ЯadiatoR @ Sep 1 2015, 23:54) А ра... Sep 2 2015, 02:24 ViKo Проверил на своих макро в Кейле.
DELAY(1, _MS);
... Sep 2 2015, 09:48 CrimsonPig Цитата(ViKo @ Sep 2 2015, 10:48) Работают... Sep 2 2015, 10:10  ViKo Цитата(CrimsonPig @ Sep 2 2015, 13:10) go... Sep 2 2015, 10:59   CrimsonPig Цитата(ViKo @ Sep 2 2015, 11:59) Конкретн... Sep 2 2015, 11:29    megajohn Цитата(CrimsonPig @ Sep 2 2015, 14:29) Ещ... Sep 2 2015, 11:37    ViKo Цитата(CrimsonPig @ Sep 2 2015, 14:29) Ещ... Sep 2 2015, 11:38 sigmaN При компиляции с оптимизацией компилятор считает к... Oct 21 2015, 13:14 ViKo Цитата(sigmaN @ Oct 21 2015, 16:14) Как м... Oct 21 2015, 13:31   dxp QUOTE (blackfin @ Oct 22 2015, 17:08) Исп... Oct 23 2015, 07:22  _Pasha Цитата(dxp @ Oct 22 2015, 13:56) На AVR о... Oct 23 2015, 13:18   ViKo Цитата(_Pasha @ Oct 23 2015, 16:18) упс. ... Oct 23 2015, 14:10 sigmaN ЦитатаНа AVR о 8-ми мегагерцах тактовой оный полин... Oct 22 2015, 16:25
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|