Извлечение корня в Python — это операция, обратная возведению в степень: квадратный корень из числа A это такое число B, что B в квадрате равно A. В Python для этого есть готовые инструменты, и выбор зависит от задачи: нужен приблизительный результат или точное целое, корень квадратный или n-й степени, число положительное или отрицательное.
Содержание
Ниже разберу все рабочие способы: функцию math.sqrt, оператор ** 0.5, целочисленный math.isqrt, корень произвольной степени и корень из отрицательных чисел через модуль cmath. Весь код прогнан на Python 3, вывод в комментариях — фактический.
Как выбрать способ
Быстрый ориентир, чтобы не читать всю статью:
| Задача | Что взять | Тип результата |
|---|---|---|
| Квадратный корень, обычные вычисления | math.sqrt(x) |
float |
| Корень без импорта модуля | x ** 0.5 |
float |
| Целая часть корня из целого (без float) | math.isqrt(x) |
int |
| Корень n-й степени | x ** (1/n) |
float |
| Корень из отрицательного числа | cmath.sqrt(x) |
complex |
Дальше — каждый способ с примером и разбором границ применимости.
math.sqrt: основной способ для квадратного корня
Функция sqrt живет в модуле math из стандартной библиотеки, поэтому модуль сначала импортируют. Функция принимает одно число и возвращает его квадратный корень типом float:
import math
print(math.sqrt(16)) # 4.0
print(math.sqrt(2)) # 1.4142135623730951
Вывод:
4.0
1.4142135623730951
Обратите внимание: даже для точного квадрата результат приходит с плавающей точкой — 4.0, а не 4. Это нормально: math.sqrt всегда возвращает float. Проверить результат можно обратной операцией — возведением в квадрат: 4.0 ** 2 даст 16.0.
Функция работает с целыми и вещественными неотрицательными числами. На отрицательном аргументе она не возвращает комплексное число, а останавливает программу ошибкой — про это отдельный раздел ниже.
Оператор ** 0.5: корень без импорта
Возведение в степень одна вторая математически равно извлечению квадратного корня. В Python это оператор **, а показатель степени 0.5:
print(16 ** 0.5) # 4.0
print(2 ** 0.5) # 1.4142135623730951
print(pow(16, 0.5)) # 4.0
Вывод:
4.0
1.4142135623730951
4.0
Результат совпадает с math.sqrt, а импорт не нужен — удобно для короткого скрипта. Встроенная функция pow(x, 0.5) делает то же самое, что оператор. Тип результата снова float: 16 ** 0.5 это 4.0, а не 4. Для больших значений math.sqrt обычно точнее и читается яснее, поэтому в расчетах чаще берут именно ее, а ** 0.5 — для разовых прикидок.
math.isqrt: целочисленный корень
Когда нужен именно целый результат без плавающей точки — например, для счетчиков, индексов или проверки на точный квадрат, — подходит math.isqrt. Она возвращает целую часть квадратного корня (округление вниз) и работает только с целыми неотрицательными числами:
import math
print(math.isqrt(16)) # 4
print(math.isqrt(17)) # 4
print(math.isqrt(15)) # 3
Вывод:
4
4
3
Из 17 и из 15 точного корня нет, поэтому функция отбрасывает дробную часть: для 17 это 4 (потому что 4 в квадрате = 16, а 5 в квадрате = 25 уже больше), для 15 это 3.
Отсюда удобная проверка, является ли число точным квадратом: возвести целый корень обратно в квадрат и сравнить с исходным числом.
import math
n = 17
r = math.isqrt(n)
print(r, r * r == n) # 4 False
Вывод:
4 False
Для 17 получаем False — точного квадрата нет. Такой способ надежнее, чем сравнивать math.sqrt(n) с округленным значением: isqrt работает с целыми числами и не зависит от погрешности float. Функция доступна начиная с Python 3.8.
Корень n-й степени
Кубический корень, корень четвертой степени и любой другой считают через оператор ** с показателем 1/n:
print(27 ** (1/3)) # кубический корень из 27
print(125 ** (1/3)) # кубический корень из 125
Вывод:
3.0
4.999999999999999
Здесь виден важный подвох. Кубический корень из 27 вышел ровным 3.0, а из 125 — 4.999999999999999 вместо ожидаемых 5.0. Причина не в математике, а в том, что 1/3 не представимо точно в двоичной плавающей точке, и погрешность накапливается. Точный результат тут — 5, но компьютер выдал число чуть меньше.
Если нужен целый корень и вы уверены, что он целый, результат стоит округлить:
print(round(125 ** (1/3))) # 5
print(round(625 ** (1/4))) # 5
Вывод:
5
5
Для аккуратного извлечения кубического корня, в том числе из отрицательных чисел, в Python 3.11 появилась функция math.cbrt. Если она доступна в вашей версии, math.cbrt(-8) вернет -2.0, тогда как (-8) ** (1/3) даст комплексное число (об этом ниже). Версию проверьте под свой интерпретатор.
Отрицательные числа и cmath
Из отрицательного числа квадратного корня в области действительных чисел нет, поэтому math.sqrt на отрицательном аргументе не возвращает результат, а поднимает ошибку ValueError:
import math
try:
print(math.sqrt(-4))
except ValueError as e:
print("ValueError:", e) # math domain error
Вывод:
ValueError: math domain error
Если корень из отрицательного числа действительно нужен (это встречается в физике и инженерных расчетах), берут модуль cmath для работы с комплексными числами. Его функция sqrt спокойно принимает отрицательные значения и возвращает комплексный результат:
import cmath
print(cmath.sqrt(-4)) # 2j
print(cmath.sqrt(-1)) # 1j
print(abs(cmath.sqrt(-4))) # 2.0
Вывод:
2j
1j
2.0
Здесь 2j — это мнимая единица, умноженная на 2 (то есть корень из -4). Функция abs от комплексного числа дает его модуль. Обратите внимание: cmath.sqrt всегда возвращает комплексный тип, даже для положительного аргумента — cmath.sqrt(4) это (2+0j), а не 2.0. Поэтому для обычных положительных чисел остается math.sqrt, а cmath подключают только когда ждут комплексный результат.
Типичные ошибки
Забытый импорт. Функции sqrt нет во встроенном пространстве имен — без import math вызов упадет с NameError:
try:
print(sqrt(16))
except NameError as e:
print("NameError:", e)
Вывод:
NameError: name 'sqrt' is not defined
Исправление — импортировать модуль и вызывать math.sqrt(16) либо написать from math import sqrt.
Ожидание целого от float-способов. И math.sqrt, и ** 0.5 возвращают float: 16 ** 0.5 это 4.0, а не 4. Если по логике программы нужен именно int (индекс, размер), результат приводят явно — int(16 ** 0.5) — или сразу берут math.isqrt для целых.
Погрешность в корне n-й степени. Как показано выше, 125 ** (1/3) дает 4.999999999999999. Не сравнивайте такой результат с целым напрямую через ==: либо округляйте round, либо для квадратного случая используйте math.isqrt.
Отрицательный аргумент у math.sqrt. Приводит к ValueError: math domain error. Для комплексного результата — cmath.sqrt.
FAQ
Чем math.sqrt отличается от оператора ** 0.5? Результат одинаковый (float), но math.sqrt читается яснее и на больших числах обычно точнее, а ** 0.5 не требует импорта и удобен для разовых вычислений.
Как извлечь корень без импорта модулей? Оператором степени: x ** 0.5 для квадратного корня и x ** (1/n) для корня n-й степени. Модуль подключать не нужно.
Почему math.sqrt(16) возвращает 4.0, а не 4? Функция всегда работает с плавающей точкой и возвращает тип float. Если нужен целый результат, приведите его через int() или используйте math.isqrt для целых чисел.
Выводы
- Квадратный корень чаще всего извлекают функцией
math.sqrt(нуженimport math); результат всегда float. - Оператор
x ** 0.5дает тот же результат без импорта,pow(x, 0.5)— аналогично. - Для целого корня из целого числа берут
math.isqrt— он не зависит от погрешности float и удобен для проверки точного квадрата. - Корень n-й степени считают через
x ** (1/n), но из-за погрешности float результат стоит округлять; в Python 3.11+ для кубического корня естьmath.cbrt. - Из отрицательного числа
math.sqrtбросаетValueError; комплексный корень даетcmath.sqrt.
Где применяется на практике
Извлечение корня нужно постоянно: расстояние между точками и длина вектора (теорема Пифагора), стандартное отклонение и среднеквадратичная ошибка в статистике и машинном обучении, нормировка данных, физические и инженерные формулы. Умение выбрать правильный инструмент — math.sqrt, math.isqrt или cmath — экономит время на отладке и уберегает от ошибок точности.
Освойте тему на практике
Освоить работу с числами, модулями и типами данных с нуля и на практике помогает курс Специализация Python-разработчик: на нем разбирают математику в коде, стандартную библиотеку и приоритет операций.
Освойте тему на практике
Посмотреть, как преподаватели объясняют такие темы, и задать свои вопросы можно на открытых вебинарах Otus — они бесплатные и проходят регулярно.
Смежные темы: Квадрат числа в математике и программировании, Случайные числа в Python.



