Beyond Complex Numbers
Why the complex plane All numbers a + b i plotted with real part a (x-axis) and imaginary part b (y-axis). Also called the Argand plane. is the perfect stage for the Mandelbrot set, how Mandelbrot Metal 3 preserves that structure at deep zoom, and what you gain and lose when you venture into higher-dimensional systems like quaternions A 4D number system (ℍ) with basis {1, i, j, k}; great for 3D rotations; multiplication is non-commutative (ab ≠ ba). .
Glossary
TL;DR
“Too long; didn’t read.” A concise summary placed near the top of a page to convey the main idea quickly.
ℂ (Complex numbers)
Numbers of the form a + b i with i2 = -1. In polar form we write z = r e^{iθ}, which couples magnitude r and angle θ.
Argand / Complex plane
The 2D plane representing ℂ with axes Re(z) and Im(z). Each complex number is a point (or vector) in this plane.
Orbit
The sequence z0, z1, z2, … obtained by iterating a map. For example, for the quadratic map zn+1 = zn2 + c.
Mandelbrot set 𝓜
The set of all parameters c for which the orbit of z0 = 0 under zn+1 = zn2 + c stays bounded (does not escape to infinity).
Julia set
For a fixed c, the Julia set is the boundary separating points whose orbits escape from those that stay bounded under zn+1 = zn2 + c.
Conformal
Locally angle-preserving. For complex functions, analytic maps with f'(z) ≠ 0 act (infinitesimally) like a rotation plus scaling — no shearing.
Analytic / Holomorphic
Complex-differentiable functions that satisfy the Cauchy–Riemann equations. Their geometry is extremely rigid, which is why complex dynamics produces such structured fractals.
Critical point
A point where f'(z) = 0. Critical points control bifurcations, stability changes, and much of the global structure in both dynamical and parameter spaces.
Multiplier
For a periodic point z0 of period p, the multiplier is λ = (fp)'(z0). Its modulus |λ| decides stability (attracting, neutral, or repelling).
Quaternion ℍ
A 4D extension of ℂ with basis {1, i, j, k}. Unit quaternions represent 3D rotations. Multiplication is non-commutative (ab ≠ ba), which breaks many of ℂ’s nicest geometric properties.
Algebraically closed
A field is algebraically closed if every non-constant polynomial with coefficients in that field has at least one root. ℂ is algebraically closed; ℝ is not (for example, x2 + 1 = 0 has no real solution).
Polar form
Writing z = r e^{iθ} with r ≥ 0 and angle θ. Squaring gives z2 = r2 e^{i 2θ}: the angle doubles and the magnitude squares.
Reference orbit
One accurately computed sequence Zn+1 = Zn2 + c0 used as the numerical anchor for nearby pixels.
Perturbation
A change of variables that evolves the small difference between a pixel orbit and a reference orbit instead of repeatedly combining tiny pixel offsets with large absolute coordinates.
Adaptive finite precision
A bounded numerical system that selects among several finite representations and recovery paths. It is not arbitrary-precision arithmetic.
TL;DR
Complex numbers bundle magnitude and angle into one algebra, so squaring If z = r e^{iθ}, then z2 = r2 e^{i 2θ}: magnitude squares, angle doubles. naturally mixes growth and rotation in each iterate of zn+1 = zn2 + c. That coupling is the engine behind the rich fractal feedback we see in the Mandelbrot set. When you move to higher-dimensional systems (like quaternions 4D numbers used for 3D rotations; multiplication order matters. ), you gain truly 3D structures but trade away some of ℂ’s symmetry and conformality Local angle preservation where the derivative is non-zero. , so the geometry becomes less uniform and more heuristic.
See It First
From Real to Complex
Over the real numbers, a simple quadratic iteration like xn+1 = xn2 + c mostly tells you whether or not values grow, shrink, or oscillate on a line. The behavior can still be interesting, but it lives in one dimension.
In ℂ, every point has both a magnitude and an angle. Writing z = r e^{iθ}, we can see what squaring Use polar form: z = r e^{iθ} ⇒ z2 = r2 e^{i 2θ}. does:
- The magnitude is squared: r → r2.
- The angle is doubled: θ → 2θ.
That means each iterate of zn+1 = zn2 + c is simultaneously a growth step (scaling the distance from the origin) and a twist step (rotating around the origin). The tug-of-war between these two effects, controlled by the parameter c, is what creates the intricate boundary structure of the Mandelbrot set.
Mandelbrot as a Map of Dynamics
Think of each parameter c as defining its own dynamical system: fc(z) = z2 + c.
- Fix c: iterate zn+1 = fc(zn) and look at which starting points escape. The boundary that separates escaping from non-escaping points is the Julia set for that c.
- Vary c over the complex plane and ask: “Does the orbit of z0 = 0 under fc stay bounded?” The set of parameters where it does is the Mandelbrot set 𝓜.
In other words, 𝓜 is a map of stability for the entire family of systems z2 + c. One of the deep theorems in complex dynamics tells us:
- If c ∈ 𝓜, the corresponding Julia set is connected.
- If c ∉ 𝓜, the Julia set is totally disconnected “dust.”
Critical points Points where f'(z) = 0. For z2 + c, the unique critical point is z = 0. play a central role here. For the quadratic family the single critical point z = 0 is exactly the one whose orbit decides whether c belongs to 𝓜.
Local conformality and global complexity
An analytic complex map with a nonzero derivative acts locally like a uniform scaling and rotation, preserving angles infinitesimally. For the quadratic map, the derivative is 2z, so this statement excludes the critical point z = 0.
This local property helps explain geometric relationships in the dynamics, but it is not a complete explanation of every visible bulb or spiral in parameter space. Critical orbits and the multipliers of periodic cycles govern broader stability and bifurcation questions. The Mandelbrot boundary is not globally exactly self-similar.
Rendering adds another layer: a finite iteration budget classifies samples, smooth coloring maps escape behavior to a gradient, and optional lighting gives that field relief. Those visual choices do not change the underlying map.
Beyond ℂ: Quaternions and 3D Fractals
Quaternions ℍ extend complex numbers to four dimensions. A quaternion can be written as q = a + b i + c j + d k, and unit quaternions are widely used to represent 3D rotations.
You can build quaternion iterations that look formally similar to the complex quadratic map, for example qn+1 = qn2 + c with quaternions in place of complex numbers. Their four-dimensional Julia and Mandelbrot sets are usually viewed through three-dimensional slices or projections. The familiar Mandelbulb is a related but distinct construction based on a spherical-coordinate power map, not simply the quaternion analogue of z2 + c.
However, quaternions are non-commutative: ab ≠ ba in general. This breaks many of the clean theorems from complex analysis:
- There is no direct analogue of “algebraically closed” in the same sense as ℂ.
- There is no single, 2D conformal structure controlling everything.
- Multiplication order and the selected slice or projection become additional considerations.
Quaternion systems have their own mathematical structure. Four-dimensional sets are commonly inspected through slices or projections, whose appearance depends on the chosen construction. They should not be described as a more detailed version of the complex Mandelbrot set. The app’s 3D Look instead shades a two-dimensional escape field; Version 3 does not expose a quaternion or Mandelbulb renderer.
Why ℂ Is Special (Quick Notes)
- ℂ is the algebraic closure of ℝ and the canonical two-dimensional, commutative field used by complex analysis.
- The multiplicative norm satisfies |z w| = |z| · |w|, which underpins clean scaling behavior in iterations.
- The analytic structure (holomorphic functions) enforces rigid local geometry, giving conformality Angle preservation via local rotation + scale whenever the derivative is non-zero. almost everywhere.
How Version 3 Preserves Complex Dynamics at Deep Zoom
At ordinary scales, each Metal thread can evaluate zn+1 = zn2 + c directly. At deep scales, however, a pixel-sized change in c can be much smaller than an ordinary floating-point coordinate can express beside the viewport center. The Infinity Engine changes the numerical representation without changing the complex dynamical system.
Reference: Zn+1 = Zn2 + c0
Nearby pixel: zn = Zn + δzn, c = c0 + δc
Full perturbation recurrence: δzn+1 = 2Znδzn + (δzn)2 + δc
One precise CPU anchor
Swift computes one complex reference orbit in double-double arithmetic—about 106 significant binary bits in normal finite operation. Each real and imaginary component is decomposed into four Float limbs for upload.
Millions of Metal pixel paths
Metal evaluates nearby pixel deltas in parallel. A fast Float tier handles well-conditioned work; difficult pixels restart in quad-single arithmetic, retaining four Float limbs per component.
Rebase and recovery
Growth and glitch checks detect when a delta is becoming numerically unsafe. Quad-single rebasing and direct recovery keep that work on the GPU when possible.
Complete-frame presentation
Live Infinity work uses bounded center-out Metal tiles. Completed tiles appear over an initialized retained preview, while completion is reported only after the entire requested image is rendered and presented. Unusable Metal results can fall back to the established CPU deep renderer.
The engine therefore evaluates the same map in coordinates that remain useful much farther into the complex plane; it does not substitute a different fractal rule.
Why a coordinate can stop changing
Near magnitude one, an ordinary Double has spacing on the order of 10−16. A much smaller pixel step can exist as a separate number but disappear when added to that center. Storing the scale successfully therefore does not prove that adjacent pixels map to distinct coordinates.
Double-double retains a high part and a residual using two Doubles. Quad-single carries a similar expansion across four Floats for Metal. The canonical fixed-point center used for storage has a different role again: it preserves coordinate state before that state is projected into the renderer’s working representations.
Perturbation reduces repeated combinations of a large absolute coordinate with a tiny displacement. It uses a shared reference and evolves the nearby difference. The algebra is unchanged, but the finite operations and recovery policy still bound accuracy.
Four questions to ask about a deep image
- Are neighboring sample coordinates still distinct?
- Is the reference orbit accurate enough for this view?
- Is the iteration budget sufficient to reveal the escape behavior of interest?
- Are color and lighting making that behavior visible?
A palette can reveal a difference that was already calculated; it cannot restore a coordinate that rounded away. More iterations can reveal later escape; they cannot repair an inaccurate coordinate. The pipeline walkthrough shows how these concerns meet in the app.
Why This Matters in Mandelbrot Metal
For Mandelbrot Metal, these aren’t just abstract facts — they’re design tools. Working in ℂ lets the renderer rely on:
- Predictable growth and escape rates from zn+1 = zn2 + c, which feed into stable smooth coloring schemes.
- A well-defined geometry for gradients and normals, which supports consistent 3D Look shading. This is a visualization of the two-dimensional escape field, not an added mathematical dimension.
- The Version 3 Infinity Engine, which combines a CPU double-double reference orbit with Metal perturbation, quad-single recovery, and bounded complete-frame presentation.
When you move beyond ℂ into higher-dimensional systems, you gain new visual possibilities, but you also give up many of these guarantees. The math becomes less rigid, and rendering often relies more on numerical experimentation and heuristics. That’s why ℂ remains the sweet spot for the classic Mandelbrot set — and why it is still the core “stage” inside Mandelbrot Metal. Version 3 is Metal-first, not Metal-only: the CPU supplies the accurate reference, the GPU performs the pixel-scale work, and the established renderer remains available as a safety path.
Version 3 Precision Boundary
Mandelbrot Metal 3 exposes a validated maximum viewport scale of 1 × 1025. This is a deliberate product boundary, not a claim of arbitrary precision. Useful resolved detail remains scene-dependent and is affected by coordinate conditioning, reference-orbit accuracy, iteration count, and the active recovery path. The ceiling states where Version 3 permits exploration; it does not promise that every location contains distinguishable structure at that scale.
Mathematical foundations and Version 3.0 build 582 implementation notes · Revised September 17, 2026.
