Ответ 1
В ECMAScript ES6 вы можете использовать Math.hypot:
// ES5 support
Math.hypot = Math.hypot || function(x, y){ return Math.sqrt(x*x + y*y) }
var x = 3, y = 4;
document.write(Math.hypot(x, y))
Я видел ряд вопросов об имитации и анимации в javascript, которые часто включают вычисление гипотенузы:
hypot = Math.sqrt(x*x + y*y);
Так как декартовы координаты являются оружием выбора в большинстве этих двигателей, эти вычисления необходимы, чтобы найти расстояние между парами точек и т.д. Таким образом, любое ускорение при вычислении гипотенузы может стать большой помощью для многих проектов.
С этой целью вы можете увидеть более быстрый метод, чем простая реализация выше? Я нашел приближение, которое было немного быстрее в Chrome, но оказалось намного медленнее в Firefox, основанном на этой функции аппроксимации в SuperCollider.
Изменить 2015-08-15: Я включил принятый ответ в Math.hypot; Я подозреваю, что прагматичный подход в настоящее время будет состоять в том, чтобы использовать Math.hypot или синтезированную функцию гипотонии, если она недоступна, и сравнить с квадратом (на каждый ответ), если этого достаточно, а Math.hypot недоступен.
В ECMAScript ES6 вы можете использовать Math.hypot:
// ES5 support
Math.hypot = Math.hypot || function(x, y){ return Math.sqrt(x*x + y*y) }
var x = 3, y = 4;
document.write(Math.hypot(x, y))
Часто вам не нужно вычислять квадратный корень и hypot^2 = x*x + y*y
достаточно. Например, если вы хотите сравнить расстояния и не нужны фактические значения.
Важный момент, который многие не знают:
hypot = Math.sqrt(x*x + y*y);
Это работает теоретически, но на практике это может потерпеть неудачу. Если x настолько велико что x * x переполняется, код приведет к бесконечному результату.
Вот как вычислить sqrt (xx + yy) без риска переполнения.
max = maximum(|x|, |y|) min = minimum(|x|, |y|) r = min / max return max*sqrt(1 + r*r)
Ссылка и полный текст: Джон Д. Кук - http://www.johndcook.com/blog/2010/06/02/whats-so-hard-about-finding-a-hypotenuse/
Вы можете посмотреть на равенство x
и y
. Если равны, вы можете рассчитать гипотенузу как (x + y)/sqrt(2)
, где sqrt(2)
- константа.
Таким образом, этот метод можно использовать для случая, когда x = y. Для других случаев его можно использовать с максимальной неточностью ~ 41%. Это большая ошибка. Но когда вы указываете допустимые пределы ошибок, вы можете использовать этот метод. Например, если определить допустимую ошибку до 5%, вы можете получить, что b
должно быть между 0.515*a
и 1.942*a
.
Итак, если вам не нужна совершенная неточность ваших вычислений, вы можете повысить производительность вычислений с диапазоном значений.
По аналогии вы можете посмотреть на равенство x
или y
на zero
. И с некоторой точностью вычисляют гипотенузу быстрее для этих случаев.
P.S. Я читал об этом в одной русской статье.