Метод не находит второй корень уравнения
Написал программу, которая находит корни уравнения с помощью метода касательных, не могу понять, в чем ошибка, почему код не видит второй корень, хотя условия я задал, подскажите, пожалуйста, в чем может быть проблема
import random
def tangent_method(f, a, b, eps):
roots = []
delta = 0.1 * (b - a)
timeout = 1000
iter = 0
df = lambda x: (f(x + eps) - f(x)) / eps
while len(roots) < 2:
x0 = a + (b - a) * random.random()
f0 = f(x0)
prev_sign = f0 / abs(f0)
while iter < timeout:
x0 -= f0 / df(x0)
f0 = f(x0)
sign = f0 / abs(f0)
iter += 1
if abs(f0) < eps:
if len(roots) == 0 or abs(x0 - roots[-1]) > delta:
roots.append(x0)
break
if sign != prev_sign:
prev_sign = sign
a, b = b, x0 + delta
break
else:
break
return tuple(roots)
f = lambda x: x**2 - 5
a, b = -5, 5
eps = 0.0001
roots = tangent_method(f, a, b, eps)
print(roots)
Источник: Stack Overflow на русском