September 3rd, 2021

QuatCore

Как быстро оценить длину вектора - 2

Да, самое вовремя, когда я решил, что этот алгоритм мне в принципе не нужен, наконец догадался, как сделать его немножко точнее.

Тогда у нас получалась максимальная ошибка 5,5%, но попросту подобрав лучшие коэффициенты, эту ошибку можно снизить до 3,96%, т.е повысить точность примерно в 1,4 раза.

Старая формула:


Взвешенная сумма Чебышевской и Манхэттенской метрик, которая сколько-нибудь прилично приближает метрику Эвклидову. Почему-то я вбил себе в голову, что сумма двух коэффициентов должна равняться единице: все 3 метрики сходятся в точках (1;0), (0;1), (-1;0) и (0;-1), причём Чебышевская метрика всегда даёт результат меньше Эвклидовой, а Манхэттенская - всегда больше. Поэтому взять и сделать, чтобы в этих самых точках, самых очевидных, самых "важных", новая метрика ДАВАЛА ОШИБКУ, пусть даже это позволит снизить ошибку "в целом", казалось кощунством.

Но в последнее время у меня сорвало тормоза, сначала на нормировке кватернионов, потом на арктангенсе, и сейчас совсем пустился во все тяжкие. Вот такую формулу придумал:


Или, если сосчитать коэффициенты:


Максимальная ошибка в 3,96% достигается в самых простых и очевидных точках, (1;0), (0;1) и так далее.

Во всём этом есть своя извращённая логика...
Collapse )

PS. А если нужна совсем грубая оценка, можно одно из следующих выражений применить:




Они оба дают одинаковую максимальную ошибку в 17%. Может, где и пригодится. Всё-таки лучше, чем 41%, если применить обычного Чебышева или Манхэттен...

Poll #2112997 Упоротые формулы

Приближения, дающие максимальную ошибку в самых тривиальных случаях

Красивое
5(45.5%)
Некрасивое, но коль работает - надо использовать
4(36.4%)
НИ ЗА ЧТО!
2(18.2%)
QuatCore

Новая команда QuatCore: "S"

Нечасто у нас команды новые появлялись, особенно в АЛУ, а не в периферии.

"Схема" АЛУ на данный момент:


Collapse )



Работает, выдаёт те же результаты, что и раньше. С "убитым" АЛУ такого быть не могло, высоки шансы, что мы ничего не поломали. И даже лишних ЛЭ не добавилось!

Теперь хочу подправить одно место в программе, где новая команда очень удобна, проверить на различных входных данных - и двинуться дальше.