Как компьютер вычисляет значение греха? Логично, что, когда я думаю об этом, единственный очевидный способ - это поместить много значений sin в память, а когда нужно «вычислить» значение sin, он просто извлечет данные с определенного адреса памяти (например, sin (x) извлечь данные из адреса памяти, содержащего значение sin (x)) Это кажется единственным возможным способом сделать это. Или есть функция, которую можно использовать для вычисления греха значения? Я действительно пытаюсь спросить, как компьютер вычисляет грех на базовом уровне. Есть ли способ аппроксимировать значения sin, используя другую функцию, состоящую из более «базовых» операций, и ALU сможет выполнять несколько «базовых» операций для аппроксимации значения sin, или это просто извлечение значений из памяти?
источник
<placeholder>
, Google "<placeholder>
алгоритм расчета". Это работает лучше, чем спрашивать о SE в большинстве случаев ..Ответы:
Обычно функции sin (x) с высоким разрешением реализуются с помощью алгоритма CORDIC (COrdiate Rotation DIgital Computer), который может быть выполнен с небольшим количеством итераций, используя только сдвиги и сложения / вычитания и небольшую таблицу поиска. Оригинальный документ CORDIC вычислительная техника Джек Volder от 1959 г. Он также хорошо работает , когда реализован с аппаратными средствами в FPGA (и аналогичный алгоритм будет реализован в аппаратном FPU для тех тысячных , которые имеют FPU).
Для более низкого разрешения, например, для создания синтезированной синусоидальной волны для частотно-регулируемого преобразователя или двигателя (преобразователь частоты), справочная таблица (LUT) с интерполяцией или без нее работает хорошо. Необходимо сохранить значения только для одного квадранта синусоиды из-за симметрии.
Как указывает @Temlib, алгоритмы, используемые в современных FPU, используют уменьшение диапазона с последующей оценкой с использованием чего-то вроде алгоритма Ремеза, чтобы ограничить максимальную абсолютную ошибку. Более подробную информацию можно найти в этой статье Intel. Официальная проверка тригонометрических функций с плавающей запятой .
источник
Большинство библиотек компьютерных триггеров основаны на полиномиальных аппроксимациях , что обеспечивает лучший баланс между скоростью и точностью. Например, дюжины или около того операций умножения и сложения / вычитания достаточно, чтобы обеспечить полную точность с одинарной точностью для синуса и косинуса.
источник