Надо таблицы, надо. Речь как раз идёт о скорости вычислений. И не для 13 бит (т.е. 4,8 десятичных цифры), а о разработке библиотечной функции с точностью 9 десятичных знаков, т.е. 32 бит. В этом случае таблицы быстрее работают.
Библиотечная функция - для чего? Как самоцель? Т.е. - сферический конь в вакууме? А почему тогда 32 бита, а не 64 к примеру?
А если вспомнить, что форум посвящён всё-таки МК, которые используются для встраиваемых применений, а не для научных расчётов или моделирования, то для каких таких задач нужно именно 32 бита? именно 32 не меньше и не больше?
И одно из практических применений синуса в сфере embedded - это генерация синусоиды (с некоей постоянной частотой). И в этом случае метод, который я описал будет и быстрее и компактнее таблиц.
Или Вы можете показать как таблично вычислить синус менее чем за одну MAC-операцию??
А если теперь ещё немного подумать и понять, что ОЗУ в МК - как правило очень ограниченный ресурс и хранить таблицы в нём - это подойдёт для разве что очень простых задач. А если хранить во флешь, то знаете какое время выборки из внутренней флешь? Сколько тактов? Так что вполне возможно, что полином с 7-ю членами ещё быстрее посчитается чем интерполяция по Вашим таблицам. Тем более если разбивать таблицы на две и использовать формулу для суммы углов (из тригонометрии).
PS: И что-то я
сильно сомневаюсь насчёт 32-бит точности при шаге таблицы 0.1градус. Вы ничего не попутали? Неужто на линейной интерполяции? И на единственной таблице (без разложения по формуле синуса суммы углов в 2 таблицы)?
Добавлено after 35 minutes 46 seconds:Поучитесь у старичков, которые раньше на примитивных процах работали.
В вашем случае достаточно линейной интерполяции и не надо никаких рядов Тейлора.
Может сначала старичкам (коли так хочется попоучать современную молодёжь) нужно покурить даташиты на современные процы на предмет скорости работы встроенной флешь и подумать "А почему собственно на самых быстрых МК внутренней флешь частенько вообще нету"?
Ну это чтобы нечаянно не вляпаться в грязь лицом перед этой самой молодёжью.
PS: Да - насчёт 13 бит точности полиномиального метода я ошибся - перепутал с STM8 где я недавно его реализовывал. Но там-то коэффициенты 16-битные и математика тоже - там ~13 бит точности получается. На ARM с его 32-битной арифметикой и коэффициентами конечно всё на порядки лучше.
В портянке ниже - расчёт 200 значений синуса из диапазона 0...90 градусов полиномом 7-й степени. Последний столбец - абсолютная величина отклонения от результата стандартной библиотечной функции
sin(double):