Root finding algorithm