However, I have designed computer game engines that use 32-bit floats throughout and encountered rounding errors in practice.
I’ve found that there’s always a solution that avoids the need to go past 64 bits, and even that is a last resort.
So for example the circle could be approximated with a polygon. Or fixed-point arithmetic can be used. Or simply use a quad-tree or related space partitioning algorithms to check for intersections.
There are literally thousands of algorithms that sidestep these issues and are used extensively in computer games, typically at 32-bit precision exclusively.
For example “back in the day” you would often see shimmering due to “z-fighting”. You would also often see white pixels due to “cracks” between adjacent polygons.
All of these are largely gone now. The problems have been solved without the enormous performance hit of 64-bit doubles, let alone 128!
Meanwhile contemporary CAD programs would insist on using 64-bit doubles, even through the OpenGL pipeline out to the screen.
But if you sit down for a second and just divide your screen (or wafer mask) by the range of your chosen numbers you’ll instantly see that you have thousands of steps per pixel (or atom!) to work with.
Any visible noise is your fault for choosing the wrong algorithm, not the fault of the hardware for not providing enough bits.