Mandelbrot ExplorerBeta
Zoom endlessly into the Mandelbrot set and click to explore its Julia sets
This tool is a beta version still being stabilized. Please let us know if a result looks off.
Zoom with the mouse wheel or a two-finger pinch, and drag to pan. For each point c the engine iterates z → z² + c and colors it by how quickly |z| escapes (black = never escaped, i.e. inside the set). Logarithmic smooth coloring removes the banding. Press “Pick Julia c” and click the Mandelbrot set to see the Julia set for that c — values of c inside the Mandelbrot set give connected shapes, values outside give scattered dust. Because of 64-bit floating point, zoom stops at about 28 trillion times (2.8 × 10¹³).
Working…
0.0
It hasn't frozen — the result will appear when the calculation finishes.
About Mandelbrot Explorer
Every pixel on screen is a complex number c. Starting from z₀ = 0, the tool iterates z → z² + c; as soon as |z| exceeds 256 it colours the pixel by how many iterations that took. If |z| never crosses that line within the maximum iteration count, the pixel is painted black and counted as part of the Mandelbrot set. The arithmetic is 64-bit floating point (f64), and the opening view is centred on −0.6 with the short side of the screen spanning 2.8.
Press “Pick Julia c by clicking” and click on the Mandelbrot set to switch modes. Now c stays fixed and each pixel supplies a different starting point z₀ for the same iteration. The two pictures come from the same formula; the only difference is which variable is held still.
The definition, and why 2 is the point of no return
The Mandelbrot set is the set of all c for which the orbit of 0 under z² + c stays bounded. It is a theorem that once |z| exceeds 2, the orbit is guaranteed to run off to infinity, so a radius of 2 is enough to decide membership. The tool waits until 256 not for the verdict but for the colouring: the smoothing formula described below becomes more accurate the larger |z| is at escape.
Tracing a few orbits by hand builds intuition. For c = −1 the orbit goes 0, −1, 0, −1… forever, so −1 is inside. For c = −2 it goes 0, −2, 2, 2, 2… and sticks, so −2 is inside too — which is why the set reaches exactly to −2 on the real axis. For c = 1 it goes 0, 1, 2, 5, 26, 677 and passes 256 on the fifth iteration.
Benoit Mandelbrot's 1980 paper brought pictures of the set to a wide audience, and Adrien Douady and John Hubbard soon named it after him and proved properties such as its connectedness.
Escape time and smooth colouring
Colouring by the raw iteration count n gives visible bands, because n is an integer. This tool uses μ = n + 1 − log₂(log₂|zₙ|) to add a fractional part. Once |z| is large it roughly squares every step, so how far past the threshold |z| landed tells you roughly where between n and n + 1 the crossing “really” happened. That erases the band edges.
There is also a speed shortcut. Points inside the main cardioid (the big heart shape) and the period-2 disc to its left can be recognised with a single formula. They would run to the iteration limit and come out black anyway, so skipping them makes the first frame appear much faster.
When the iteration limit is too low
Black means “did not escape within the limit,” not “proven to be inside.” Near the boundary many points survive for a very long time before escaping, so a low limit paints outside points black and makes fine filaments look blunt.
A striking case is the neck of Seahorse Valley near c = −0.75. For c = −0.75 + εi, the number of iterations to escape multiplied by ε approaches π — a pattern Dave Boll found in 1991 and Aaron Klebanoff analysed in a 2001 paper. At the default 500 iterations, the point with ε = 0.001 (which actually escapes after 3,146 iterations) is wrongly painted as inside. With “Auto with zoom” on, the limit grows as 200 + 120 × (log₁₀ zoom)², up to 20,000.
Why zoom stops at about 10¹³×
An f64 carries 53 bits of significand. Numbers between 1 and 2 are spaced about 2.2 × 10⁻¹⁶ apart, and numbers between 0.5 and 1 half that. The tool won't let the view span shrink below 10⁻¹³; on an 800-pixel canvas that makes one pixel 1.25 × 10⁻¹⁶ wide. Where the real part exceeds 1 in size — the left side of Seahorse Valley near c ≈ −1.25, for instance — that step is finer than the spacing of representable numbers, neighbouring pixels round to the same value, and square blocks start to appear.
Programs that render extreme deep-zoom videos typically compute one reference orbit in arbitrary precision and the rest as small f64 differences from it (perturbation methods). This tool favours instant response in the browser and does not do that, so its zoom limit is about 2.8 × 10¹³.
Julia sets: where you pick c matters
If c lies inside the Mandelbrot set, its Julia set is a single connected piece; if c lies outside, the Julia set shatters into disconnected dust (a Cantor set). In that sense the Mandelbrot set is a map of which c values give connected Julia sets. Picking c closer to the boundary gives more intricate Julia sets; the default c = −0.8 + 0.156i sits just next to it.
Worked examples
c = 1, computed the way the tool does it
- Input
c = 1 + 0i, escape radius 256- Output
z: 0 → 1 → 2 → 5 → 26 → 677; escapes at n = 5; smooth value μ ≈ 2.77
μ = 5 + 1 − log₂(log₂ 677) = 6 − log₂(9.40) ≈ 6 − 3.23 = 2.77. The smooth value comes out below the raw count because of how the correction is defined; only the ordering of colours matters.
Finding π at the neck of Seahorse Valley
- Input
c = −0.75 + εi with ε = 0.1, 0.01, 0.001- Output
Escape after 36 / 318 / 3,146 iterations → times ε: 3.6 / 3.18 / 3.146
As ε shrinks, the product approaches π = 3.14159…. The third point is painted black at the default 500-iteration limit; raise the limit above about 5,000 to see that it is outside.
The tip of the real axis
- Input
c = −2 and c = −2.01- Output
−2: 0, −2, 2, 2, 2… (inside) / −2.01: escapes on iteration 8
The set extends exactly to −2 on the real line. Stepping just 0.01 beyond it makes the orbit blow up within a few iterations.
How to use it
- Zoom with the wheel or a pinch, and drag to pan.
- If the boundary looks blurry, raise max iterations or enable “Auto with zoom”.
- Press “Pick Julia c by clicking” and click a point on the set.
- Switch palettes to bring out different iteration structure.
Key terms
- Escape time
- The number of iterations before the orbit first exceeds the escape radius.
- Main cardioid
- The heart-shaped body of the set; for c inside it, the orbit converges to a single point.
- Julia set
- For a fixed c, the boundary of the set of starting points whose orbits under z² + c stay bounded.
- Double precision (f64)
- The IEEE 754 64-bit floating-point format: a 53-bit significand, about 15–16 decimal digits.
Frequently asked questions
What is the area of the Mandelbrot set?
No exact value is known; numerical estimates put it at roughly 1.5. This tool does not compute area.
I read that you can zoom forever. Why does it stop?
Mathematically the boundary has detail at every scale, but this tool uses 64-bit floating point, and once pixel spacing approaches 10⁻¹⁶ neighbouring pixels can no longer be told apart. Zoom is therefore capped at about 2.8 × 10¹³×.
Is everything black really inside the set?
Black only means the point did not escape within the iteration limit. Near the boundary, raising the limit turns some black points into colour.
Why does rendering slow down as I zoom?
Deeper views contain more points close to the boundary, and the automatic iteration limit rises. The renderer draws in 8-pixel blocks, then 2-pixel, then 1-pixel, so the view stays responsive while it sharpens.
Sources
- B. B. Mandelbrot, Fractal aspects of the iteration of z → λz(1−z) for complex λ and z, Ann. N.Y. Acad. Sci. 357, 249–259 (1980)
- A. Klebanoff, π in the Mandelbrot set, Fractals 9(4) (2001)
- D. Goldberg, What Every Computer Scientist Should Know About Floating-Point Arithmetic (1991)
Last reviewed: