Скорость MathPow(): одно маленькое исследование - страница 2

 
Mathemat >>:

Да в том-то и дело, что диапазоны-то разные. В худшем случае - примерно от -1500 до +1500 с шагом 10 (300 чисел). Но я, кажись, догадался, что Вы имеете в виду. Табулирование степеней, что ли?

Вот сейчас прикинул, сколько раз пришлось бы в степень возводить в моем случае. Немного, никак не больше 10 миллионов. Так что зря беспокоился, преувеличил угрозу.

2 Vinin: да ладно, Вить, забудем о хитром алгоритме. В финансовых вычислениях необходимость в нем редка. Но как пример программной оптимизации вычислений он вполне показателен.

Не знаю что Вы имели в виду под термином "табулирование",

я имел в виду заполнение таблицы ArrayPow[Argument][Pow] )).

Скорее всего, это "табулирование" и есть.

.

Книга была вроде "Написание игр под ZX Spectrum". 

В ней была поразившая меня рекомендация загонять функции синуса и другие в таблицы.

Естественно, с определенным шагом.

.

Для факториалов строится табличка Паскаля.

Приятно, что она вообще вся на сложении.

.

Сейчас я строил единое временное пространство котировок-

так любой бар ищется по времени точно так же - моментально,

поскольку индексом выступает выражение от времени.

 
jartmailru >>:

В ней была поразившая меня рекомендация загонять функции синуса и другие в таблицы.

Ну да, правильно. Я не знаю, какой алгоритм вычисления синуса самый быстрый, но и тривиальный ряд Тейлора - тоже очень быстро сходится. А если ввести значения синуса на периоде с небольшим шагом и затем интерполировать по параболе, то можно достичь вполне приличной точности, но значительно быстрее.

P.S. Вообще на первых "персоналках" алгоритмы были умнее.

P.P.S. jartmailru, нуль все равно не получится. Я дописал раньше:

А приходится ведь не только степени независимого аргумента вычислять, но и еще умножать их на степени значений.

Регрессий-то сотни у меня. Не буду же я еще и степени значений в таблицы загонять?!

 
Mathemat >>:

Возведение числа в действительную степень - хоть и несколько устаревшая статья, но всё же хорошая.

Быстрое возведение в степень - ещё немного по этой теме.

 

Спасибо, HideYourRichess. Первая ссылка прямо на диссер тянет. Серьезное такое исследование, и результат вполне достойный - ускорение в 2-4 раза.

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

 
Mathemat >>:

Спасибо, HideYourRichess. Первая ссылка прямо на диссер тянет. Серьезное такое исследование, и результат вполне достойный - ускорение в 2-4 раза.

Мне подход автора нравится. Потому, собственно, и кинул ссылку. Сама проблема, пути решения, оценка результатов - всё что нужно.


Но, я бы настоятельно рекомендовал вынести все объёмные вычисления в dll. Из мт4 сильно больше чем есть - не выжмешь. Но это вы и так наверное знать должны.

 
Да знаю я, конечно. Пока достаточно и MQL4. Ничего страшного, если скрипт, который предполагается запускать довольно редко, поработает лишние полчаса.
 
jartmailru писал(а) >>

Сейчас я строил единое временное пространство котировок-

так любой бар ищется по времени точно так же - моментально,

поскольку индексом выступает выражение от времени.

О! Очень интересно. Мне позарез что-то подобное нужно делать. (Мультивалютная синхронизация графиков).

А как с пропущенными барами обходишься? Ответь поподробнее если не в лом.

 
MetaDriver >>:

О! Очень интересно. Мне позарез что-то подобное нужно делать. (Мультивалютная синхронизация графиков).

А как с пропущенными барами обходишься? Ответь поподробнее если не в лом.

Когда резервируется массив с временной индексацией- массив, разумеется, строится из объектов,

а конструктор класса их автоматом чистит в нули. Т.е. если по конкретному индексу, рассчитанному из времени,

в котировке лежит 0 во времени и в open- значит, бара нет. Дырка.

Идею более подробно изложил здесь:

Собственно, не так давно реализовал расчет Exponential MA. Работает.

 
jartmailru писал(а) >>

Когда резервируется массив с временной индексацией- массив, разумеется, строится из объектов,

а конструктор класса их автоматом чистит в нули. Т.е. если по конкретному индексу, рассчитанному из времени,

в котировке лежит 0 во времени и в open- значит, бара нет. Дырка.

Ок, понял. Разумно.

jartmailru писал(а) >>

Идею более подробно изложил здесь:

Спасибо, почитал. Кое что понял.

А на чём пишешь? Ежели на шарпе - могу составить компанию.

Впрочем на плюсах тож возможно. Просто удовольствия от шарпа больше получаю. Сервис, мда.

jartmailru писал(а) >>

Собственно, не так давно реализовал расчет Exponential MA. Работает.

А это сильно надо? Это про индикаторы. Я пока что намерен брать значения индюков прямо из МТ.

Т.е. сделать временные треки из значений индюков и в ту же базу засунуть.

Знаю быстрый-дешёвый-практичный способ массового экспорта значений индюков из МТ.

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

Что ценно - индюк пишется один раз - под МТ. И тут же можно пользоваться на любой платформе.

Надо? Сам изобрёл. Недостаток естессно тот же - несинхронность и пропуски баров (что частично поправимо).

Или будешь индюки писать? Правда одно другое вовсе не исключает... :)

 
MetaDriver >>:

{...} А на чём пишешь? Ежели на шарпе - могу составить компанию. 

Впрочем на плюсах тож возможно. Просто удовольствия от шарпа больше получаю. Сервис, мда.

Пишу на плюсах. Написал в личку.

Причина обращения: