Вопрос проверяет понимание области определения функций и корректной обработки ошибок в математических алгоритмах.
Вещественный квадратный корень из отрицательного числа не существует, поэтому функция должна либо выбрасывать исключение, либо работать с комплексными числами. В стандартном math.sqrt() возникает ошибка. Модуль cmath возвращает комплексное число. Поведение зависит от требований к функции.
Поведение функции должно быть определено заранее и соответствовать контексту задачи.
Определение:
Domain error — это ошибка, возникающая, когда аргумент функции выходит за область допустимых значений.
Пример:
import math
math.sqrt(-1) # ValueError
Это корректное поведение для вещественной математики.
Если задача допускает комплексные значения:
import cmath
cmath.sqrt(-1) # 1j
В этом случае результат корректен в комплексной арифметике.
Часто в прикладном коде делают проверку:
def safe_sqrt(x):
if x < 0:
raise ValueError("Negative input")
return x ** 0.5
Это делает поведение функции очевидным.
Зависит от задачи:
Финансовые расчеты — обычно исключение
Научные расчеты — комплексные числа
Пользовательский ввод — валидация
Для вещественных вычислений отрицательный аргумент должен приводить к ошибке. Если требуется математическая полнота, используют комплексные числа.