Более быстрая точность принесения в жертву математического алгоритма

9
задан grayger 10 December 2009 в 16:07
поделиться

6 ответов

Эти алгоритмы в литературе называются «алгоритмами аппроксимации». Стандартная книга с множеством примеров - это Аппроксимационные алгоритмы Виджая В. Вазирани .

Случай sin x ~~ x является частным случаем чего-то более общего: посмотрите на Taylor ряд (или ряд Фурье в случае периодических функций) вашей функции и вычислить только несколько первых членов.

Другой (несколько жестокий) метод - это случайным образом собрать несколько точек вашей функции и затем выполнить линейную регрессию против них. Таким образом, вы также можете получить хороший многочлен, описывающий вашу функцию :).

9
ответ дан 4 December 2019 в 06:57
поделиться

для малых x: sin (x) ~ = x часто используется в физике

5
ответ дан 4 December 2019 в 06:57
поделиться

У Нико есть несколько хороших предложений, к которым я бы добавил старомодную справочную таблицу.

Я много раз успешно использовал справочную таблицу для круговых функций (sin / cos / tan) в высокопроизводительной системе реального времени. Sqrt () сложнее, но если ваш диапазон ввода ограничен (например, пиксели экрана), его трудно превзойти по скорости, и вы можете точно настроить компромисс между пространством / точностью. Вы также можете использовать поиск для общего диапазона, а затем использовать функцию sqrt () фреймворка для редкого случая.

Paul

3
ответ дан 4 December 2019 в 06:57
поделиться

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

1
ответ дан 4 December 2019 в 06:57
поделиться

Любая непрерывная функция (которая включает в себя наиболее распространенные математические операции) может быть хорошо аппроксимирована на ограниченном интервале полиномом. Это, вместе с относительно простыми тождествами, которым обычно удовлетворяют обычные математические функции (например, законы сложения) и поиском в таблицах, обеспечивает основу стандартных методов построения алгоритмов быстрого приближения (а также основу методов высокой точности, подобных тем, которые используются в системной математике). библиотека).

Однако серии Тейлора обычно плохой выбор; Полиномы Чебышева или Минимакс имеют гораздо лучшие характеристики ошибок для большинства вычислительных применений. Стандартный метод подбора минимаксных полиномов заключается в использовании алгоритма Ремеса, который реализован во многих коммерческих математических программах, или вы можете свернуть свою собственную реализацию с дневной работой, если знаете, что вы

Для справки, на современных процессорах следует избегать «быстрого обратного квадратного корня», поскольку гораздо быстрее использовать команду вычисления обратного квадратного корня с плавающей запятой ( rsqrtss / rsqrtps на SSE, vrsqrte на NEON, vrsqrtefp на AltiVec). Даже (не приблизительный) аппаратный квадратный корень довольно быстрый на современных процессорах Intel.

13
ответ дан 4 December 2019 в 06:57
поделиться

Из исходного кода Doom для приблизительного расстояния между двумя двухмерными точками без использования sqrt () или тригонометрических функций:

fixed_t P_AproxDistance(fixed_t dx, fixed_t dy )
{
    dx = abs(dx);
    dy = abs(dy);
    if (dx < dy)
        return dx+dy-(dx>>1);
    else
        return dx+dy-(dy>>1);
}

Обратите внимание, что x >> 1 равно то же, что x / 2 , но немного быстрее - современные современные компиляторы делают это автоматически, но тогда они были не так хороши.

2
ответ дан 4 December 2019 в 06:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: