Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
/* This file:
 *   http://angg.twu.net/MAXIMA/findchanges1.mac.html
 *   http://angg.twu.net/MAXIMA/findchanges1.mac
 *           (find-angg "MAXIMA/findchanges1.mac")
 * Author: Eduardo Ochs <eduardoochs@gmail.com>
 *
 * (defun m () (interactive) (find-angg "MAXIMA/findchanges1.mac"))
 * (find-es "maxima" "2022-2-C3-VR")
 *
 * Status: untested!
*/



findchanges1(f,a,b,n) :=
  block([va,vb,c,vc],
        [va,vb] : [f(a),f(b)],
        for i: 1 thru n do
          (c  : (a+b)/2,
           vc : f(c),
           if equal(va,vc) then [a,va]:[c,vc] else [b,vb]:[c,vc]),
        c)$

findchanges(Fboo,F,points,n, tag) :=
  block([npoints,results,fboo,a,b,xa,ya,xb,yb,c],
        npoints : length(points),
        results : [],
        fboo(t) := Fboo(F(t)[1], F(t)[2]),
        for i: 1 thru npoints-1 do
          (a : points[i],
           b : points[i+1],
           if not equal(fboo(a), fboo(b)) then
	     (c : float(binsearch(fboo,a,b,n)),
              push([F(c), c, tag], results)
             )
          ),
        reverse(results))$


/* Local Variables:
 * coding:  utf-8-unix
 * End:
*/