Everything is working but I'm still left with the problem of it taking a lot longer to render when zooming in.
Now it does each pixel only once and I'm sure of it.
It does not execute more lines of code by zooming in on the fractal at all.
The only difference I see is that the numbers is uses get a log bigger.
Does computing a number like 1.203592928220659 take a long longer than just 1.2?
I've never noticed it before so I'm thinking even if larger numbers do take more time it can't make this much of a difference.
Zooming in taking longer to render is pretty unavoidable if you're zooming into areas on the boundary of the Set, in particular if the image has large areas of "inside", this is simply because more iterations are necessary on average per pixel to decide if the pixels are inside or outside.
As you say a solution is reduce the max iteration value but of course doing this results in loss of detail and the more you zoom in the greater the loss of detail will be, in fact normally one would actually want to *increase* the max iterations on higher magnifications.
One way of offsetting the speed problem that is emploiyed in many fractal programs is early detection of "inside" points where the orbit of the point concerned is tending to a fixed value (point attractor).
To do this on each iteration before calculation of the new z value, store the current value as say zold, then after calculating the new z value test the value of (z.x-zold.x)^2+(z.y-zold.y)^2 against a small threshold (smallbailout), say at largest 1e-3 and if the calculated value is less than 1e-3 then assume the point is "inside" and stop iterating. The problem with this method is if the theshold value (here 1e-3) is too large then this test in itself will introduce "errors" in the render i.e. reduce the detail level.
The thing to do to render a given view of an escape-time fractal in an optimum manner speedwise is to use a correct balance of the 3 values - the bailout value, the max iteration value and this small bailout test value (here 1e-3). Speedwise of course one should always use the minimum possible bailout value, e.g. testing z.x^2+z.y^2 against 4.0 for the z^2+c Mandelbrot (and z^2+c Julias), the optimum max iterations and smallbailout test value will depend on individual views but in general the more zoomed in you are then to avoid gross loss of detail then the larger you need to make max iterations and the smaller you need to make the small bailout test value.
For a better guide on fractal orbits see:
http://www.fractalgallery.co.uk/orbits.html