Подтвердить что ты не робот

Тригонометрия вычислительно дорого?

В какой-то статье я читал, что триггерные вычисления обычно дороги. Это правда? И если да, то почему они используют триггерные таблицы?

EDIT: Хм, так что если единственное, что изменится, это градусы (с точностью до 1 градуса), будет ли таблица поиска с 360 записями (для каждого угла) быстрее?

4b9b3361

Ответ 1

Дорогое - относительный термин.

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

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

Все это происходит очень быстро в эти дни, поэтому "дорогой" зависит от того, сколько его нужно делать, и как быстро вам это нужно.

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

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

Ответ 2

В процессоре Intel x86 для сложения или вычитания с плавающей запятой требуется 6 тактовых циклов, умножение требует 8 тактов и деления 30-44 тактовых циклов. Но для косинуса требуется от 180 до 280 тактов.

Это все еще очень быстро, поскольку x86 делает эти вещи на аппаратном уровне, но он намного медленнее, чем более основные математические функции.

Ответ 3

Так как sin(), cos() и tan() являются математическими функциями, которые вычисляются путем суммирования рядов, разработчики иногда используют таблицы поиска, чтобы избежать дорогостоящего расчета.

Компромисс в точности и памяти. Чем больше потребность в точности, тем больше объем памяти, необходимый для таблицы поиска.

Взгляните на следующую таблицу с точностью до 1 градуса.

http://www.analyzemath.com/trigonometry/trig_1.gif

Ответ 4

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

Если вы пишете программу и просто нужно называть ее пару раз в секунду, встроенные функции достаточно быстр.

Ответ 5

Я бы порекомендовал написать тестовую программу и пометить ее для себя. Да, они медленны по сравнению с плюсом и минусом, но они все еще одно процессорные инструкции. Это вряд ли будет проблемой, если вы не делаете очень плотный цикл с миллионами итераций.

Ответ 6

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

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

Ответ 7

Если вы всегда знаете углы, которые вы вычисляете, вы можете хранить их в переменной, а не вычислять их каждый раз. Это также применяется в вашем вызове метода/функции, где ваш угол не изменится. Вы можете быть умными, используя некоторые формулы (вычисляя sin (theta) от sin (theta/2), зная, как часто повторяются значения - sin (theta + 2 * pi * n) = sin (theta)) и сокращение вычислений. См. this wikipedia article

Ответ 8

да, это так. триггерные функции вычисляются путем суммирования ряда. Таким образом, в общих чертах было бы намного дороже, чем простая математическая операция. то же самое для sqrt