Это, по-видимому, уже до полусмерти обсуждалось при переполнении стека. Вот краткое изложение наиболее интересных моментов:
Вывод: math.sqrt
значительно быстрее в большинстве версий / реализаций Python.
Заключение: ни то, ни другое, они оба одинаково (с довольно замечательным уровнем точности) плохи несколько по-разному.
Редактировать:
По причинам, обсуждаемым @MarkDickinson в комментариях ниже, информация в приведенном выше вопросе «Какой более точный» является неточной и устаревшей. Что имеет смысл, так как ему почти 10 лет.
Я могу подтвердить, что тесты, перечисленные в принятом ответе, теперь возвращают разные ответы:
(8885558**0.5)**2: 8885558.000000002
math.sqrt(8885558)**2: 8885558.000000002
2**1023.99999999999: 1.7976931348498497e+308
(math.sqrt(2**1023.99999999999))**2: 1.7976931348498495e+308
((2**1023.99999999999)**0.5)**2: 1.7976931348498495e+308
((2**1023.99999999999)**0.5)**2 - 2**1023.99999999999: -1.99584030953472e+292
(math.sqrt(2**1023.99999999999))**2 - 2**1023.99999999999: -1.99584030953472e+292
Попробуйте тесты для себя онлайн < / а>. Я получил те же результаты на онлайн-интерпретаторе, что и на нескольких моих лабораторных машинах (которые, по общему признанию, все x86-64).
Слово бога (т.е. Гвидо)
Гвидо (доброжелательный диктатор на всю жизнь Python) ответил на электронное письмо, отправленное OP на более быстрый вопрос:
pow и ** эквивалентны; math.sqrt не работает с комплексными числами и ссылается на функцию C sqrt (). Я понятия не имею, какой из них быстрее ...
Хотя он прямо не рассматривает причины дублирования, он явно знает об этом и указывает, что, по крайней мере, в некоторых случаях они действительно ведут себя по-разному.
person
tel
schedule
29.03.2018
math.pow(x,2)
иx**2
. - person Dan   schedule 29.03.2018+
тоже можно удалить? - person Jongware   schedule 29.03.2018