* * $Id: c205body.inc,v 1.1.1.1 1996/02/15 17:49:07 mclareni Exp $ * * $Log: c205body.inc,v $ * Revision 1.1.1.1 1996/02/15 17:49:07 mclareni * Kernlib * * #ifndef CERNLIB_KERNNUM_C205BODY_INC #define CERNLIB_KERNNUM_C205BODY_INC * * * c205body.inc * LOGICAL MFLAG,RFLAG EXTERNAL F PARAMETER (ONE = 1, HALF = ONE/2) XA=MIN(A,B) XB=MAX(A,B) FA=F(XA,1) FB=F(XB,2) IF(FA*FB .GT. 0) GO TO 5 MC=0 1 X0=HALF*(XA+XB) R=X0-XA EE=EPS*(ABS(X0)+1) IF(R .LE. EE) GO TO 4 F1=FA X1=XA F2=FB X2=XB 2 FX=F(X0,2) MC=MC+1 IF(MC .GT. MXF) GO TO 6 IF(FX*FA .GT. 0) THEN XA=X0 FA=FX ELSE XB=X0 FB=FX END IF 3 U1=F1-F2 U2=X1-X2 U3=F2-FX U4=X2-X0 IF(U2 .EQ. 0 .OR. U4 .EQ. 0) GO TO 1 F3=FX X3=X0 U1=U1/U2 U2=U3/U4 CA=U1-U2 CB=(X1+X2)*U2-(X2+X0)*U1 CC=(X1-X0)*F1-X1*(CA*X1+CB) IF(CA .EQ. 0) THEN IF(CB .EQ. 0) GO TO 1 X0=-CC/CB ELSE U3=CB/(2*CA) U4=U3*U3-CC/CA IF(U4 .LT. 0) GO TO 1 X0=-U3+SIGN(SQRT(U4),X0+U3) END IF IF(X0 .LT. XA .OR. X0 .GT. XB) GO TO 1 R=MIN(ABS(X0-X3),ABS(X0-X2)) EE=EPS*(ABS(X0)+1) IF(R .GT. EE) THEN F1=F2 X1=X2 F2=F3 X2=X3 GO TO 2 END IF FX=F(X0,2) IF(FX .EQ. 0) GO TO 4 IF(FX*FA .LT. 0) THEN XX=X0-EE IF(XX .LE. XA) GO TO 4 FF=F(XX,2) FB=FF XB=XX ELSE XX=X0+EE IF(XX .GE. XB) GO TO 4 FF=F(XX,2) FA=FF XA=XX END IF IF(FX*FF .GT. 0) THEN MC=MC+2 IF(MC .GT. MXF) GO TO 6 F1=F3 X1=X3 F2=FX X2=X0 X0=XX FX=FF GO TO 3 END IF 4 R=EE FF=F(X0,3) RETURN 5 CALL KERMTR('C205.1',LGFILE,MFLAG,RFLAG) IF(MFLAG) THEN IF(LGFILE .EQ. 0) WRITE(*,100) IF(LGFILE .NE. 0) WRITE(LGFILE,100) END IF IF(.NOT.RFLAG) CALL ABEND R=-2*(XB-XA) X0=0 RETURN 6 CALL KERMTR('C205.2',LGFILE,MFLAG,RFLAG) IF(MFLAG) THEN IF(LGFILE .EQ. 0) WRITE(*,101) IF(LGFILE .NE. 0) WRITE(LGFILE,101) END IF IF(.NOT.RFLAG) CALL ABEND R=-HALF*ABS(XB-XA) X0=0 RETURN #endif