Możliwe, że to jest błędne:
if (A < 0) //upewnienie sie, ze wspolczynnik A jest dodatni
Narysuj sobie funkcję:
-1 -1 +20
lub po twoim przekształceniu:
1 1 -20
Autor nie mówi, że funkcja nie ma miejsc zerowych. Tylko badany przedział ich nie zawiera.
Możliwe, że tylko mi się wydaje błędem, to co napisałem wyżej…
Co do samego twojego sposobu, nie wypowiem się, możliwe, że jest poprawny, Życzę powodzenia.
EDIT
W świetle powyższego, myślę, że poniższwe stwierdzenie nie musi zawsze być prawdą:
double E = P - S; //blad (zawsze P >= S)