У меня есть своя.Это довольно точно и вроде быстро.Он работает на основе теоремы, которую я построил вокруг сходимости четвертого порядка.Это действительно интересно, и вы можете увидеть уравнение и то, как быстро оно может приблизить мое естественное логарифмическое приближение: https://www.desmos.com/calculator/yb04qt8jx4
Вот мой код arccos:
function acos(x)
local a=1.43+0.59*x a=(a+(2+2*x)/a)/2
local b=1.65-1.41*x b=(b+(2-2*x)/b)/2
local c=0.88-0.77*x c=(c+(2-a)/c)/2
return (8*(c+(2-a)/c)-(b+(2-2*x)/b))/6
end
Многое из этогоэто просто квадратный корень приближения.Он также работает очень хорошо, если только вы не слишком близко к получению квадратного корня из 0. Он имеет среднюю ошибку (исключая x = 0,99 к 1) 0,0003.Проблема, однако, в том, что при 0,99 он начинает дерьмо, а при х = 1 разница в точности становится 0,05.Конечно, это можно решить, выполнив больше итераций с квадратными корнями (lol nope) или, если немного, например, если x> 0.99, то использовать другой набор линеаризаций с квадратными корнями, но это делает код длинным и уродливым..
Если вам не очень важна точность, вы можете просто сделать одну итерацию на квадратный корень, что все равно должно удерживать вас где-то в диапазоне 0,0162 или что-то еще, что касается точности:
function acos(x)
local a=1.43+0.59*x a=(a+(2+2*x)/a)/2
local b=1.65-1.41*x b=(b+(2-2*x)/b)/2
local c=0.88-0.77*x c=(c+(2-a)/c)/2
return 8/3*c-b/3
end
Если вы согласны с этим, вы можете использовать уже существующий квадратный корень.Это избавит от того, что уравнение сходит с ума при x = 1:
function acos(x)
local a = math.sqrt(2+2*x)
local b = math.sqrt(2-2*x)
local c = math.sqrt(2-a)
return 8/3*d-b/3
end
Честно говоря, если вы действительно ограничены во времени, помните, что вы можете линеаризовать arccos в 3.14159-1.57079xи просто сделайте:
function acos(x)
return 1.57079-1.57079*x
end
В любом случае, если вы хотите увидеть список моих уравнений аппроксимации арккос, вы можете перейти к https://www.desmos.com/calculator/tcaty2sv8l Я знаю, что мои приближения не самые лучшие навернякавещи, но если вы делаете что-то, где мои приближения были бы полезны, пожалуйста, используйте их, но попробуйте дать мне кредит.