#                                        Ren-Cang Li, June 1, 1996
#                                        na.rcli@na-net.ornl.gov

cxsItern:=proc(x0L:vector, c80L, x0U:vector,c80U, xM:vector)
  local niter, xL, c8L, yL, xU, c8U, yU, eps, x0, y0, x1, y1, 
	c80, c81, yM, c8M;
  eps:=10^(-Digits+30): niter:=0:
  xL:=x0L: c8L:=c80L: xU:=x0U: c8U:=c80U:
  #
  c8fixed(xL,c8L): yL:=dcxsoverdc8(xL,c8L): 
  c8fixed(xU,c8U): yU:=dcxsoverdc8(xU,c8U):
  if yL*yU>=0 then
     print(`Warning: there may be two zeros or NONE.`);
     print(`Please INTERRUPT to stop!`);
  fi:
  x0:=xL: y0:=yL: c80:=c8L: x1:=xU: y1:=yU: c81:=c8U:
  c8M:=c81-y1*((c81-c80)/(y1-y0)):
  if c8M<c8L or c8M>c8U then
     c8M:=(c8L+c8U)/2:
     xM:=evalm((xL+xU)/2):
  else
     xM:=evalm((y0/(y0-y1))*x1+(y1/(y1-y0))*x0):
  fi:
  c8fixed(xM, c8M):
  yM:=dcxsoverdc8(xM,c8M):
  
  while abs(c8M-c81)>eps*abs(c8M) and niter<101 and abs(yM)>eps do
        niter := niter + 1:
        if yL*yM>=0 then
           xL:=xM: yL:=yM: c8L:=c8M:
        else
           xU:=xM: yU:=yM: c8U:=c8M:
        fi:
        x0:=x1: y0:=y1: c80:=c81:
        x1:=xM: y1:=yM: c81:=c8M:
        c8M:=c81-y1*((c81-c80)/(y1-y0)):
        if c8M<c8L or c8M>c8U then
           c8M:=(c8L+c8U)/2:
           xM:=evalm((xL+xU)/2):
        else
           xM:=evalm((y0/(y0-y1))*x1+(y1/(y1-y0))*x0):
        fi:
        c8fixed(xM, c8M):
        yM:=dcxsoverdc8(xM,c8M):
	# print(yM);
  od:
  if niter>100 then
     print(`In cxsItern: Over 100 iterations`):
  fi:
  c8M;
end:
