через МНК коэффициенты считается заранее и один раз, их не нужно постоянно пересчитывать. Таким образом часто неэлементарные функции считают — вот тут, например.
Мой метод работает быстрее и точнее — поэтому ваш метод мне не подходит тоже. И лично я не вижу принципиальной разницы между выделением памяти под таблицы и выделением памяти под это:
Для обеспечения одной и той же точности две таблицы от 0 до pi/4 с синусами и косинусами будут занимать меньше места, чем одна таблица с синусом от 0 до pi/2. Нужно будет только значения из них комплексно перемножить — это два сложения и четыре умножения.
Точно так же, как и в прошлый раз — поменять действительную и мнимую часть местами:
В таблице хранится и синус, и косинус. Если синус и косинус используются для вращения векторов — они обычно считаются от одного и того же угла, поэтому и имеет смысл вычислять их одновременно. И даже если косинус не нужен — на последней стадии вычислений его можно просто не вычислять.
В кубической аппроксимациями тоже есть место для оптимизации. Можно вообще ничего не считать, а просто хранить уже посчитанные 4 коэффициента, а сам кубический полином считать схемой Горнера — будет 3 сложения и 3 умножения.
Можно вообще использовать аппроксимацию рациональным полиномом, а коэффициенты для него считать методом наименьших квадратов.
Симметричность — само собой. Алгоритм основан на тождестве
после каждой итерации которого b приближается к нулю. Синус и косинус таким образом считаются одновременно.
Для точных табличных вычислений совсем не обязательно использовать такие гигантские объёмы, если использовать тригонометрические тождества. В своей библиотеке я считаю синусы с точностью ≈30 знаков используя 4 таблицы по 64 элемента.
Добавлю нытья. Очень часто кажется, что некоторые математики специально запутывают свои тексты, чтобы менее сведущему в математике человеку было сложнее разобраться.
Приведу конкретный пример. Пишу библиотеку для вычислений с повышенной точностью и дошла очередь до вычисления логарифмов. Поиск в интернете вывел на статью «A New Method for Approximating Logarithms with k-th Order» (pdf) — но даже после 20 прочтений так и не смог ничего понять. Там вводятся леммы, доказываются неравенства, даже есть глава с названием «The Algorithm», но вот самого алгоритма с формулой, где слева — логарифм, а справа — вычисления, обнаружить не смог. В конце там есть таблица с результатами и упоминается MATLAB, посредством которого сделаны вычисления, но самого кода — нет. Им что, жалко? Мне попадались работы, где код на фортране занимал больше места, чем математическое описание, и за такие работы отдельное спасибо авторам (хотя код у математиков обычно получается не очень) — как минимум его можно отдебажить и понять суть хотя бы алгоритмически.
И ладно если бы я был дебил — но в итоге, плюнув на всё, смог вывести алгоритм вычисления логарифма самостоятельно (и это не метод Ньютона). И даже после этого я не смог до конца понять ту работу — в частности, откуда ограничение в r≤½, и почему m должно быть обязательно целым — т.к. у меня и с нецелым всё прекрасно считается.
Направленный звук можно сделать так же, как и направленное радио-излучение — фазированной решёткой и параболическим рефлектором. Физика процесса та же.
Вот несколько постулатов в найме и управлении которые стоит взять на вооружение хотя бы частично:
Не бывает «частичного соответствия»
Усматриваю противоречие. Если частичного соответствия не бывает, то и частичного вооружения быть не должно.
Все руководители должны иметь больший опыт в разработке, нежели их подчиненные. Обычно это разрыв в 3-5 лет между ними.
Опыт разработки накапливается во время разработки, а не руководства. Когда я 15 лет назад пришёл на работу — да, мой руководитель имел много больше опыта. Сейчас наоборот.
Никаких «попугаев». Оценка работы должна проводится по разным параметрам, в том числе и сложности, а не по количеству строк кода.
Сложность — это лишь другой вид «попугаев». Как её оценивать? Сложно то, что вне твоей компетенции. Запутать код или архитектуру, чтобы увеличить его/её сложность тоже сможет каждый.
Но я-то в контексте этой дискуссии пишу, так что логичнее оставлять комментарии здесь.
Хочу заметить, что лично я не ни вижу никакой дискуссии. Понятное дело, что рабоче-крестьянское изложение режет глаз настоящим математикам, но что делать, жизнь — боль, на хабре и не такое пишут.
По первой ссылке чувак доказал, что 0/0 = 1, круто.
Так нужно было написать это в комментариях к той статье, а не этой — не факт, что автор той статьи прочитает эту и в частности, ваше сообщение.
Ссылки на эти статьи я дал для демонстрации того, что вопрос с делением на ноль для большинства по-прежнему не прост — даже названия у них утверждают противоположное.
Весь абзац ваш про деление на ноль мне не нравится, ибо в школе учат совершенно конкретной теории с совершенно конкретными свойствами, а эта ваша компуктерная арифметика даже не ассоциативна и не коммутативна, где обычная продолжает быть таковой.
Вы сейчас, видимо, говорите о вычислениях исключительно с плавающей точкой, поскольку в целочисленной всё соблюдается в пределах доступной разрядности. Но и там, если учитывать погрешность вычислений, то ассоциативность и коммутативность соблюдаются в рамках этих погрешностей. В математических работах, связанных с компьютерными вычислениями, контролю погрешности уделяется особое внимание.
В символьных вычислениях, в частности в Wolfram Mathematica, такие понятия как Indeterminate или ComplexInfinity также используются.
Про предел, тащем, тоже, не стоит отождествлять предел в точке и значение функции в этой точке.
Безусловно, существуют и случаи, когда предел слева не равен пределу справа или вообще отсутствует. Но невозможно в одно сообщение уместить весь курс матанализа, чтобы соблюсти идеальную математическую точность высказывания.
Если уж так хочется делить на ноль, возьмите...
В этом и был смысл сообщения — если хочется, то можно такую возможность обеспечить, и даже несколькими способами.
(1.0 / 6.0, //3!
1.0 / 120.0, //5!
1.0 / 5040.0, //7!
1.0 / 362880.0, //9!
1.0 / 39916800.0, //11!
1.0 / 6227020800.0, //13!
1.0 / 1307674368000.0, //15!
1.0 / 355687428096000.0); //17!
В таблице хранится и синус, и косинус. Если синус и косинус используются для вращения векторов — они обычно считаются от одного и того же угла, поэтому и имеет смысл вычислять их одновременно. И даже если косинус не нужен — на последней стадии вычислений его можно просто не вычислять.
Можно вообще использовать аппроксимацию рациональным полиномом, а коэффициенты для него считать методом наименьших квадратов.
И в вашем примере с 75° и 15° симметрия также легко прослеживается:
после каждой итерации которого b приближается к нулю. Синус и косинус таким образом считаются одновременно.
Приведу конкретный пример. Пишу библиотеку для вычислений с повышенной точностью и дошла очередь до вычисления логарифмов. Поиск в интернете вывел на статью «A New Method for Approximating Logarithms with k-th Order» (pdf) — но даже после 20 прочтений так и не смог ничего понять. Там вводятся леммы, доказываются неравенства, даже есть глава с названием «The Algorithm», но вот самого алгоритма с формулой, где слева — логарифм, а справа — вычисления, обнаружить не смог. В конце там есть таблица с результатами и упоминается MATLAB, посредством которого сделаны вычисления, но самого кода — нет. Им что, жалко? Мне попадались работы, где код на фортране занимал больше места, чем математическое описание, и за такие работы отдельное спасибо авторам (хотя код у математиков обычно получается не очень) — как минимум его можно отдебажить и понять суть хотя бы алгоритмически.
И ладно если бы я был дебил — но в итоге, плюнув на всё, смог вывести алгоритм вычисления логарифма самостоятельно (и это не метод Ньютона). И даже после этого я не смог до конца понять ту работу — в частности, откуда ограничение в r≤½, и почему m должно быть обязательно целым — т.к. у меня и с нецелым всё прекрасно считается.
Опыт разработки накапливается во время разработки, а не руководства. Когда я 15 лет назад пришёл на работу — да, мой руководитель имел много больше опыта. Сейчас наоборот.
Сложность — это лишь другой вид «попугаев». Как её оценивать? Сложно то, что вне твоей компетенции. Запутать код или архитектуру, чтобы увеличить его/её сложность тоже сможет каждый.
Ссылки на эти статьи я дал для демонстрации того, что вопрос с делением на ноль для большинства по-прежнему не прост — даже названия у них утверждают противоположное.
Вы сейчас, видимо, говорите о вычислениях исключительно с плавающей точкой, поскольку в целочисленной всё соблюдается в пределах доступной разрядности. Но и там, если учитывать погрешность вычислений, то ассоциативность и коммутативность соблюдаются в рамках этих погрешностей. В математических работах, связанных с компьютерными вычислениями, контролю погрешности уделяется особое внимание.
В символьных вычислениях, в частности в Wolfram Mathematica, такие понятия как Indeterminate или ComplexInfinity также используются.
Безусловно, существуют и случаи, когда предел слева не равен пределу справа или вообще отсутствует. Но невозможно в одно сообщение уместить весь курс матанализа, чтобы соблюсти идеальную математическую точность высказывания.
В этом и был смысл сообщения — если хочется, то можно такую возможность обеспечить, и даже несколькими способами.