Я пошел по этому пути несколько лет назад, когда мне пришлось преобразовать некоторый аудио-код снятия отпечатков пальцев с плавающей запятой на фиксированную. Твердыми частями были DCT (который использовал большой косинусный стол) и высокоточный логарифм. Я обнаружил удивительно мало на пути существующих библиотек. С тех пор я слышал, что оригинальный Sony PlayStation (PS1) не имел поддержки с плавающей запятой, поэтому форумы разработчиков (fori?) Для него, если они еще существуют, могут иметь то, что вы ищете.
Некоторым людям, с которыми я работал, повезло с библиотекой NewMat , хотя она ориентирована на линейную алгебру, а не на тригонометрию, и, кажется, фокусируется на числах с плавающей точкой. Тем не менее, его сайт приводит к этому списку , который, похоже, стоит проверить. Я также нашел spuc , библиотеку обработки сигналов, которая может быть полезна для поддержки фиксированной точки. И много лет назад я видел библиотеку шаблонов обработки сигналов (sptl) от Fraunhofer. Я думаю, что это было частным, но может быть доступно как-то.
Несмотря на это, я думаю, вы довольно близки с тем, что у вас уже есть. Поскольку у вас есть функция синуса, у вас также есть функция косинуса, при условии, что вы соответствующим образом преобразуете ввод (cos(x) == sin(x + pi/2)
). Поскольку тангенс является частным от синуса и косинуса (tan(x) = sin(x) / cos(x)
), вы в основном там для тригонометрии.
Что касается векторов, разве классы STL vector и valarray, объединенные с алгоритмами STL, тоже не приблизят вас? Если нет, то всегда есть математические библиотеки Boost .
Извините, я не могу указать вам на серебряную пулю, которую вы ищете, но то, что вы пытаетесь сделать, довольно необычно в наши дни. Люди, которым нужна точность, обычно переходят прямо к плавающей точке, которая имеет приличную производительность на современных процессорах и поддерживает множество библиотек. Те, кто хочет получить скорость на оборудовании с ограниченными ресурсами, обычно не нуждаются в точности и не выполняют триггер по вектору, и, вероятно, тоже не делают C ++. Я думаю, что ваш лучший вариант - кататься самостоятельно. Попытайтесь думать об этом как о применении шаблона дизайна колеса в новом контексте, а не об изобретении его. :)