Сначала я хотел добавить это в качестве комментария, но стало слишком много ставок, так что вот:
Попробуй сам. Создайте цикл с 10 000 итераций, в котором вы просто вычисляете a*a + b*b
, и еще один отдельный цикл, в котором вы вычисляете Math.sqrt(a*a + b*a)
. Время это, и вы будете знать. Вычисление square root
представляет собой итеративный процесс сам по себе, в котором цифровой (компьютерных битов) квадратный корень сходится ближе к реальному квадратному корню заданного числа, пока он не станет достаточно близким (как только разница между каждой итерацией станет меньше некоторого действительно небольшого значения ). Помимо того, что использует библиотека Math
, существует несколько алгоритмов, и их скорость зависит от входных данных и от того, как разработан алгоритм. По моему мнению, остановитесь на Math.sqrt(...)
, вы не ошибетесь, и это было проверено МНОЖЕСТВОМ людей.
Хотя это можно сделать очень быстро для одного квадратного корня, существует определенная наблюдаемая разница во времени.
На заметку: я не могу придумать причину для вычисления квадратного корня более одного раза, обычно в конце. Если вы хотите узнать расстояние между точками, просто используйте квадратное значение этого расстояния по умолчанию и выполняйте сравнения/суммирование/вычитание или все, что вы хотите, на основе этого значения по умолчанию.
PS: предоставьте больше кода, если вам нужен более «практичный» ответ.
person
Roel Strolenberg
schedule
30.05.2016
dx * dx + dy * dy
работает примерно в два раза быстрее, чемMath.sqrt(dx * dx + dy * dy)
. Вы упомянули четверть скорости, что означает разницу в 4 раза. Если вас не волнует ускорение в 2 или 4 раза, то это не имеет значения, не так ли? В общем случае это имеет значение только в том случае, если вы делаете это много. Остерегайтесь преждевременной оптимизации. Исправляйте ее, если измеряете проблему, не усложняйте свой код на основе (ошибочных?) предположений о производительности. - person Andreas   schedule 30.05.2016