картина спектра почему то зависит от выбранной дискреты.
Конечно будет зависеть, так как сдвиг - это аппроксимация производной, то есть зависит от дискретизации!!! Просто формулы с этим учетом надо вывести и все долно получаться.
Не знал, что простая перестановка тоже влияет, спасибо большое.
У шарпа вообще говоря модель памяти другая. Но результаты схожие.
тут на скорость работы влияет не модель памяти языка программирования, а то, как эти данные расположены в памяти. Уверен, что и каком-нибудь паскале будет все примерно также, а на питоне, и жаве разница будет меньше, чем на компилируемых языках, так как есть еще оверхед на байткод, но зато быстрый вариант на жаве будет проигрывать быстрому на С++.
То, что если мы будем алгоритм как есть, без перестановок, пытаться оптимизировать переписывая на ассемблер, пусть даже и с SSE, AVX и всякими ухищрениями типа степень двойки вычислять битовыми сдвигами и т.д. то вот это компилятор сделает настолько хорошо, что и соревноваться с ним смысла никакого нет.
да, тут соглашусь, но добавлю, что современная архитектура компьютеров на столько сложная, что большинство программистов даже на С++ не пишут такой код, в котором компилятору есть даже гипотетическая необходимость использовать специальные инструкции типа SSE - для этого код должен хорошо конвейеризоваться.
Основной мой посыл был в том, что большинство алгоритмов вычислительной математики позволяет с умом менять последовательность выполнения операций, и большинство обычных программистов совершенно не задумываются об этом, поэтому, средняя необдуманная версия реализации какого-нибудь математического алгоритма на современных процессорах может быть в сотни и тысячи раз медленней хорошо обдуманной версии.