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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Математика с float на Cortex-M3.
Jenya7
сообщение Sep 1 2015, 08:42
Сообщение #1


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Если я заменю (100/3.5) на (100 * 0.286) повлияет это на размер/скорость кода? или компилятор сам автоматически оптимизирует математические операции?
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 1 2015, 10:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Jenya7 @ Sep 1 2015, 11:42) *
Если я заменю (100/3.5) на (100 * 0.286) повлияет это на размер/скорость кода? или компилятор сам автоматически оптимизирует математические операции?

1/3.5 != 0.286

А что хотите получить в итоге? Если константу, то на этапе компиляции все значения будут вычислены и заменены одним числом: целым или с ПТ в зависимости от контекста.

Если нужна математика с переменными, то x/y не может быть заменен на x * (1/y) компилятором самовольно - такая оптимизация ваша задача.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 1 2015, 11:56
Сообщение #3


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(adnega @ Sep 1 2015, 15:55) *
1/3.5 != 0.286

А что хотите получить в итоге? Если константу, то на этапе компиляции все значения будут вычислены и заменены одним числом: целым или с ПТ в зависимости от контекста.

Если нужна математика с переменными, то x/y не может быть заменен на x * (1/y) компилятором самовольно - такая оптимизация ваша задача.


этот момент я и хотел выяснить. операция деления тяжелей умножения поэтому я хочу заменить деление умножением.


а вот еще такой вопрос. что предпочтительней - поделить на целое или умножитьна флоат. x/167 или x* 0.005988?
Go to the top of the page
 
+Quote Post
menzoda
сообщение Sep 1 2015, 12:05
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 13-09-12
Пользователь №: 73 530



Если есть FPU, то умножать быстрее будет, иначе точно не скажешь - нужно тестировать.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 1 2015, 12:13
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Jenya7 @ Sep 1 2015, 14:56) *
что предпочтительней - поделить на целое
Перед делением целое будет приведено в плавающую точку (см. правила приведения типов).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 1 2015, 12:18
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Сергей Борщ @ Sep 1 2015, 15:13) *
Перед делением целое будет приведено в плавающую точку (см. правила приведения типов).

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 1 2015, 12:22
Сообщение #7


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(zltigo @ Sep 1 2015, 17:18) *
Вообще-то автор не сказал какой тип он собирается делить и какой получить. Так что для ответа нужно точно сформулировать вопрос.

да. забыл уточнить. делю флоат на инт.
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 1 2015, 13:44
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Jenya7 @ Sep 1 2015, 15:22) *
да. забыл уточнить. делю флоат на инт.

А в первом сообщении
Цитата
Если я заменю (100/3.5) на (100 * 0.286)

все наоборот озвучивалось.

Скорее всего, имеет место быть "преждевременная оптимизация", а это, как известно, зло))
Без "махинаций" не работает?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 1 2015, 14:06
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (adnega @ Sep 1 2015, 16:44) *
Скорее всего, имеет место быть "преждевременная оптимизация", а это, как известно, зло))

Часто слышу эту глупость sad.gif, когда услышав звон, не поняли о чем он sad.gif
QUOTE
Без "махинаций" не работает?

Не худо бы для начала выяснить, что на "не работает" вообще никто не жалуется.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 1 2015, 14:51
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zltigo @ Sep 1 2015, 17:06) *
Часто слышу эту глупость sad.gif, когда услышав звон, не поняли о чем он sad.gif

Не худо бы для начала выяснить, что на "не работает" вообще никто не жалуется.

А хамить не нужно))

На вопрос
Цитата
повлияет это на размер/скорость кода? или компилятор сам автоматически оптимизирует математические операции?

отвечу "повлияет на размер и скорость выполнения; компилятор не умеет оптимизировать математику, не имея дополнительной информации о переменных".

Такого ответа желал услышать ТС? В чем смысл созданной темы в ветке "ARM"? Просто поболтать, или насущная необходимость в оптимизации появилась?
Я поспешно предположил второе. Если вы тут просто пообщаться собрались, то прошу прощения, что влез, а власть имущих прошу перенести тему в соответствующий раздел)

Если хотите, чтобы с вами поделились опытом в вопросе "грамотной перестановки слагаемых",
то задавайте конкретный вопрос, чтоб проблематика была понятна, а обмусоливать такты и байты... не в "ARM,32"
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 1 2015, 15:26
Сообщение #11


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(adnega @ Sep 1 2015, 19:51) *
А хамить не нужно))

На вопрос

отвечу "повлияет на размер и скорость выполнения; компилятор не умеет оптимизировать математику, не имея дополнительной информации о переменных".

Такого ответа желал услышать ТС? В чем смысл созданной темы в ветке "ARM"? Просто поболтать, или насущная необходимость в оптимизации появилась?
Я поспешно предположил второе. Если вы тут просто пообщаться собрались, то прошу прощения, что влез, а власть имущих прошу перенести тему в соответствующий раздел)

Если хотите, чтобы с вами поделились опытом в вопросе "грамотной перестановки слагаемых",
то задавайте конкретный вопрос, чтоб проблематика была понятна, а обмусоливать такты и байты... не в "ARM,32"


все работает. все делиться и результаты правильные. просто прибор работает на батарейке и я пытаюсь сэкономить на всем. вот я и решил заменить деление умножением.
может сэкономлю кванты энергии которые в конечном счете помогут продлить жизнь батарейке.

Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 1 2015, 16:24
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Jenya7 @ Sep 1 2015, 18:26) *
помогут продлить жизнь батарейке.

Тут все еще сложнее)

Что выгоднее: понижать тактовую CPU или увеличивать ее (с учетом возможности сна)?
Или разница не значительна?
Мне кажется, чем больше частота и чем больше транзисторов переключается, тем выше потребление.

Можно провести эксперимент: x*y и x/y запустить миллион таких операций и замерить произведение времени выполнения на потребляемый ток.
Затем сравнить два этих числа и сделать вывод на сколько процентов отличается.
Пробовали?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 1 2015, 16:37
Сообщение #13


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(adnega @ Sep 1 2015, 21:24) *
Тут все еще сложнее)

Что выгоднее: понижать тактовую CPU или увеличивать ее (с учетом возможности сна)?
Или разница не значительна?
Мне кажется, чем больше частота и чем больше транзисторов переключается, тем выше потребление.

Можно провести эксперимент: x*y и x/y запустить миллион таких операций и замерить произведение времени выполнения на потребляемый ток.
Затем сравнить два этих числа и сделать вывод на сколько процентов отличается.
Пробовали?


Пытаюсь сейчас подергать ногой, посмотреть сколько времени занимает каждая функция.
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Sep 1 2015, 17:54
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Цитата(adnega @ Sep 1 2015, 13:55) *
1/3.5 != 0.286
на этапе компиляции все значения будут вычислены и заменены одним числом: целым или с ПТ в зависимости от контекста.


А разве препроцессор обрабатывает float значения?
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 1 2015, 18:04
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ЯadiatoR @ Sep 1 2015, 20:54) *
А разве препроцессор обрабатывает float значения?

Я про float не горовил, но в свое время пользовался так
Код
#define    Vc                                        (1430.0)                //!< Напряжение при V25, мВ.
#define    Ta                                        (4.3)                        //!< Крутизна преобразования, мВ/C.
#define    Tb                                        (25.0)                    //!< Температура V25, C.

#define    TCPU_MIN                            (-40.0)                    //!< Нижняя температура, C.
#define    TCPU_MAX                            (85.0)                    //!< Верхняя температура, C.
#define    TCPU_HYST                            (5.0)                        //!< Гистерезис температуры, C.

#define    TCPU(T)                                (Vc - Ta * ((T) - Tb))

#define    TCPU_COLD                            ((int)(TCPU(TCPU_MIN)))
#define    TCPU_HOT                            ((int)(TCPU(TCPU_MAX)))
#define    TCPU_NORMAL_MIN                ((int)(TCPU(TCPU_MIN + TCPU_HYST)))
#define    TCPU_NORMAL_MAX                ((int)(TCPU(TCPU_MAX - TCPU_HYST)))

и имел TCPU_COLD, TCPU_HOT, TCPU_NORMAL_MIN, TCPU_NORMAL_MAX в виде int-овых констант.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 2 2015, 02:24
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ЯadiatoR @ Sep 1 2015, 23:54) *
А разве препроцессор обрабатывает float значения?

Препроцессор не обрабатывает ни флоат ни инт (за исключением вычисления значения выражения внутри #if).
Он выполняет текстовую подстановку.
Сто раз уже это здесь говорили за последнее время.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 2 2015, 05:42
Сообщение #17


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(adnega @ Sep 1 2015, 21:04) *
Я про float не горовил, но в свое время пользовался так
...
и имел TCPU_COLD, TCPU_HOT, TCPU_NORMAL_MIN, TCPU_NORMAL_MAX в виде int-овых констант.

Поясните, пожалуйста, программа работала с float (или даже с double), и только результат приводила к int? Как-то тяжеловато.
Или сам компилятор всё вычислял? То есть, в #define можно смело пользоваться числами с плавающей запятой?
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 2 2015, 05:58
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ViKo @ Sep 2 2015, 08:42) *
Поясните, пожалуйста, программа работала с float (или даже с double), и только результат приводила к int? Как-то тяжеловато.
Или сам компилятор всё вычислял? То есть, в #define можно смело пользоваться числами с плавающей запятой?

Программа работала только с целыми числами. По сути, показания с АЦП без какой-либо обработки сравнивались с константами для
получения событий выхода встроенного датчика температуры из диапазона. Если честно переводить показания АЦП в температуру,
а потом сравнивать с порогами, то пришлось бы незаурядно выкручиваться в целых числах.

Но определив несколько define-ов, можно добиться того, что компилятор сам все рассчитает и в нужные места подставит константы.
Как справедливо было замечено, не препроцессор, а именно компилятор.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 2 2015, 07:47
Сообщение #19


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(adnega @ Sep 2 2015, 08:58) *
Но определив несколько define-ов, можно добиться того, что компилятор сам все рассчитает и в нужные места подставит константы.
Как справедливо было замечено, не препроцессор, а именно компилятор.

Еще раз спрошу. Компилятор посчитал числа с плавающей запятой? w00t.gif
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 2 2015, 08:29
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ViKo @ Sep 2 2015, 10:47) *
Еще раз спрошу. Компилятор посчитал числа с плавающей запятой? w00t.gif

Видимо:
Код
                if(value < TCPU_HOT)
8002b9e:    f240 4293     movw    r2, #1171; 0x493
8002ba2:    4290          cmp    r0, r2
8002ba4:    dd08          ble.n    8002bb8 <sh_a_value+0x194>


Vc - Ta * ((T) - Tb) = 1430.0 - 4.3 * (85.0 - 25.0) = 1172
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 2 2015, 09:48
Сообщение #21


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Проверил на своих макро в Кейле.
DELAY(1, _MS);
DELAY(0.001, _SS);
Работают одинаково! Где бы найти документальное подтверждение? Думал, дробная часть в любых числах при компиляции отбрасывается.
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Sep 2 2015, 10:10
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(ViKo @ Sep 2 2015, 10:48) *
Работают одинаково! Где бы найти документальное подтверждение? Думал, дробная часть в любых числах при компиляции отбрасывается.


google "c constant folding"
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 2 2015, 10:59
Сообщение #23


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(CrimsonPig @ Sep 2 2015, 13:10) *
google "c constant folding"

Конкретнее никак нельзя? rolleyes.gif
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Sep 2 2015, 11:29
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(ViKo @ Sep 2 2015, 11:59) *
Конкретнее никак нельзя? rolleyes.gif


Ээээ.. поясняю...
1. открываем интернет-бравзер.
2. пытаемся найти там адресную строку.
3. кликаем тура мышой
4. ищем клавиатуру.
5. нажимаем следующие кнопки: w,w,w,.g,o,o,g,l,e,.,c,o,m, <enter>
6. делаем еще мозговое усилие и ищем строку ввода поискового запроса.
5. повторяем пункты 3 и 4
6. вводим ключевые слова, как подробно описано в пункте 5.
7. смотрим на экран
8. пытаемся найти там результаты поиска.
9. читаем..

Еще конкретнее ?
Go to the top of the page
 
+Quote Post
megajohn
сообщение Sep 2 2015, 11:37
Сообщение #25


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(CrimsonPig @ Sep 2 2015, 14:29) *
Еще конкретнее ?


многа букав, не осилят. Нужно сразу давать ссылку


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 2 2015, 11:38
Сообщение #26


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(CrimsonPig @ Sep 2 2015, 14:29) *
Еще конкретнее ?

Если нечего сказать, не говори ничего! (с)
Положим, в тех местах, где я смотрел, ответа не нашел.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Oct 21 2015, 13:14
Сообщение #27


I WANT TO BELIEVE
******

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



При компиляции с оптимизацией компилятор считает константные выражения и заменяет их сразу на результат.
int a = 100 * 0.5; будет заменено на загрузку в a значения 50 и эмуляция плавучки не будет линковаться к проекту.
Такое можно делать даже на AVR.
Понятно, что любые составляющие этого константного выражения могут быть #define'ами т.к. препроцессинг это просто подстановка текста.

Вычисляются выражения на этапе компиляции по тем-же правилам как и в рантайме(т.е. со всеми приколами integer promotion, приведениями типов и т.д.)

На практике я видел как даже функции из math.h с константными и известными на этапе компиляции аргументами часто считаются компилятором и в рантайме не вызываются.
К приммеру можете попробовать сделать
int a = round(1.5); и посмотреть дизасм

Цитата
Думал, дробная часть в любых числах при компиляции отбрасывается.
Как мне когда-то тут сказали: последнюю версию компилятора поставить может каждый...но надо иногда и книжки по Си читать )))))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 21 2015, 13:31
Сообщение #28


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(sigmaN @ Oct 21 2015, 16:14) *
Как мне когда-то тут сказали: последнюю версию компилятора поставить может каждый...но надо иногда и книжки по Си читать )))))

Выходит, компилятор внутре себя имеет неенку полноценный вычислитель всех стандартных C функций? И ему даже не надо указывать "подгрузить" заголовочные файлы "math.h"?
А float d = sin(M_PI / 8); тоже вычислит?

Были бы хорошие книжки, почитал бы еще, и с удовольствием. Но они баснословно дорого стоят. А в электронном виде - это эрзац-книжки.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Oct 21 2015, 16:47
Сообщение #29


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...
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 22 2015, 10:56
Сообщение #30


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 доступных).

Предложите свой вариант решения? И оцените, сколько это потребует времени, и какая сложность реализации по сравнению с этим решением "в лоб"?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
blackfin
сообщение Oct 22 2015, 11:08
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(dxp @ Oct 22 2015, 13:56) *
Алгоритм вычисления - простой полином 3-го порядка:

y = a3*x^3 + a2*x^2 + a1*x + a0

Предложите свой вариант решения? И оцените, сколько это потребует времени, и какая сложность реализации по сравнению с этим решением "в лоб"?

Использовать Схему Горнера?

/Шутка, если што../
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Oct 22 2015, 16:25
Сообщение #32


I WANT TO BELIEVE
******

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



Цитата
На AVR о 8-ми мегагерцах тактовой оный полином вычисляется за время около 6 или 8 (не помню точно) мс. Плавучка тянет где-то полтора кБ кода. Задача решена (общий размер прошивки ~5 кБ из 8 доступных).

Предложите свой вариант решения? И оцените, сколько это потребует времени, и какая сложность реализации по сравнению с этим решением "в лоб"?

Нет, ну если всё работает и успевает то я только за! Я просто поделился своим опытом)


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 23 2015, 07:22
Сообщение #33


Adept
******

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



QUOTE (blackfin @ Oct 22 2015, 17:08) *
Использовать Схему Горнера?

Угу, она, родимая, и использовалась:

CODE
float P5x(const TtCoeffs* const p, const float x)
{
    return ((((p->a5*x + p->a4)*x + p->a3)*x + p->a2)*x + p->a1)*x + p->a0;
}


QUOTE (blackfin @ Oct 22 2015, 17:08) *
/Шутка, если што../

sm.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 23 2015, 13:18
Сообщение #34


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(dxp @ Oct 22 2015, 13:56) *
На AVR о 8-ми мегагерцах тактовой оный полином вычисляется за время около 6 или 8 (не помню точно) мс. Плавучка тянет где-то полтора кБ кода. Задача решена (общий размер прошивки ~5 кБ из 8 доступных).

упс. а чего это у меня по той же схеме , авр 20МГц - считает не в 2.5 раза быстрее, а в 4 ?
Сейчас еще перепроверю, что за фигня.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 23 2015, 14:10
Сообщение #35


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(_Pasha @ Oct 23 2015, 16:18) *
упс. а чего это у меня по той же схеме , авр 20МГц - считает не в 2.5 раза быстрее, а в 4 ?
Сейчас еще перепроверю, что за фигня.

У вас числа другие. biggrin.gif
Go to the top of the page
 
+Quote Post

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

 


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


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