A massive fractal in days, not years [pdf]
jcgt.org
jcgt.org
https://www.iquilezles.org/www/articles/juliasets3d/juliaset... (There are links to youtube recordings of the realtime renders as well as actual code samples on shadertoy)
https://twitter.com/iquilezles/status/1295932323242811393?p=...
http://blog.hvidtfeldts.net/index.php/2011/12/distance-estim...
While improving numerical stability is interesting and useful work, a GPU isn't strictly limited to 64 bit math. You can glue two 64-bit floats together to act like a much more precise float. It will be a big hit to efficiency, but nowhere near a 200x hit!
The way to think of them is for a real number r, a double d(r) is the closest value storable in a double, but there may be some error between the real value and the floating-point approximation.
Store that in another double, called dd(r) = r-d(r), and it will have a smaller exponent, but most importantly, it gives you twice as many bits of precision.
Then carefully make +-*/ operations, and you're off to the races.
I've implemented them from scratch on many platforms over the years, often to do deep mandelbrot runs, since they have really good performance for the between double and arbitrary precision libraries.
But it's always the same idea: one double as normal, and another double to represent the difference between the value you care about and the double that represents the higher order bits.
https://en.wikipedia.org/wiki/Quadruple-precision_floating-p...
Paper:
http://web.mit.edu/tabbott/Public/quaddouble-debian/qd-2.3.4...
[0] https://github.com/lumianph/gpuprec [1] https://event.cwi.nl/damon2010/gpuprecision.pdf [2] https://homepages.laas.fr/mmjoldes/campary/ [3] https://hal.archives-ouvertes.fr/hal-01312858/document
Reminds me of Hofstadter's Law.