/* ECP: FILEname=fig6_17.c */ /* 1*/ #include "root.h" /* 2*/ int /* 3*/ DifferentSign( double ( *F )( double ), double Pt1, double Pt2 ) /* 4*/ { /* 5*/ return ( ( *F )( Pt1 ) < 0 ) != ( ( *F )( Pt2 ) < 0 ); /* 6*/ } /* 7*/ double /* 8*/ Solve( double ( *F )( double ), double Low, double High ) /* 9*/ { /*10*/ double Mid = ( Low + High ) / 2.0; /*11*/ double SmallInterval = ( High - Low ) * Epsilon; /*12*/ if( ! ( *F )( Low ) ) /*13*/ return Low; /*14*/ else /*15*/ if( ! ( *F )( High ) ) /*16*/ return High; /*17*/ else /*18*/ if( ! DifferentSign( F, Low, High ) ) /*19*/ { /*20*/ printf( "Suggested points have same sign!\n" ); /*21*/ return SolveError; /*22*/ } /*23*/ while( ( *F )( Mid ) && ( High - Low ) > SmallInterval ) /*24*/ { /*25*/ if( DifferentSign( F, Low, Mid ) ) /*26*/ High = Mid; /*27*/ else /*28*/ Low = Mid; /*29*/ Mid = ( Low + High ) / 2.0; /*30*/ } /*31*/ return Mid; /*32*/ }