Судя по вот этому round(a-b, 3) , ты хочешь считать до тех пор, пока "расстояние" между числами а и b не станет очень маленьким. Строгое равенство трудно получить, лучше использовать "больше"/"меньше" - это раз. А два - x = round((a+b)/2, 3) тут ты не сокращаешь расстояние между числами, а увеличиваешь, потому что новая полусумма в любом случае будет присвоена или а или b. Может тебе надо было x = round((a-b)/2, 3)?