Я не уверен, чего вы пытаетесь достичь, но, вероятно, используете:
if(fabs(p-p0)<tol){
вместо:
if((p-p0)<tol){
приблизит вас к тому месту, куда вы хотите пойти.
Причина в том, что все отрицательные значения меньше, чем .001
, поэтому, если результатом функции является отрицательное значение (как в этом случае), вы немедленно остановитесь.
Кстати: этот чек:
if(i>N){
никогда не будет правдой. Вы, вероятно, хотели использовать ==
или >=
вместо >
.