Я реализовал таблицу поиска для вычисления значений синуса / косинуса в своей системе. Теперь мне нужны обратные тригонометрические функции (arcsin / arccos).
Мое приложение работает на встроенном устройстве, на котором я не могу добавить вторую таблицу поиска для arcsin, поскольку у меня ограничена программная память. Итак, решение, которое я имел в виду, заключалось в том, чтобы просмотреть таблицу синусоидального поиска, чтобы получить соответствующий индекс.
Мне интересно, будет ли это решение более эффективным, чем использование стандартной реализации из стандартной математической библиотеки.
Кто-нибудь уже экспериментировал с этим?
Текущая реализация LUT представляет собой массив значений синуса от 0 до PI / 2. Значение, хранящееся в таблице, умножается на 4096, чтобы сохранить целочисленные значения с точностью, достаточной для моего приложения. Таблица поиска с разрешением 1/4096 дает нам массив из 6434 значений. Затем у меня есть две функции: синус и косинус, которые в качестве аргумента принимают угол в радианах, умноженный на 4096. Эти функции преобразуют заданный угол в соответствующий угол в первом квадранте и считывают соответствующее значение в таблице.
Мое приложение работает на dsPIC33F со скоростью 40 MIPS, и я использую пакет компиляции C30.