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