Добрый день.
Пусть у меня есть несколько
. Сами значения
распределены хаотично по этому интервалу, и это данность ни от чего не зависит и ни от чего не меняется.
У меня имеется последовательность
,
мне надо быстро считать
, вернее
и
,
так, что
, но может слегка отличаться от единицы примерно на доли процента.
То есть я вылизываю по точности и скорости модуль, в который попадает последовательность
и задана 16-ти битными целыми,
бывает, что не меняется с предыдущего вызова, (скажем так, примерно каждый второй раз меняется), а на выходе этого модуля мне надо получать
и
.
Хочется решать эту задачу с минимальным числом арифметических операций.
Пока реализовал так, считаю синусы и косинусы кордиком с точностью 18 бит по двум таблицам на 512 значений каждая, так, что на вычисление каждой пары синусов тратится 4 умножения (то есть всего надо примерно
операций), но далее, результаты все равно приходится умножать матрично, что требует еще
операций, то есть суммарно,
, это я еще перевод комплексного в тригонометрическую форму не учел.
У меня банально флопов не хватает, при
мне надобно
арифметических операций, а у меня есть в наличии только примерно
.
Скажите, пожалуйста, есть ли какой-то способ использовать тот факт, что
заданы и не меняются, чтоб как-то уменьшить вычислительную сложность этой задачи?
Или хотя бы для случая, когда
не меняется?
PS: Ранг матрицы такого неравномерного Фурье полный, то есть малоранговость не попользуешь.
Спасибо!