# ContourPlot3D with small domain produces glitchy mess

I'm able to plot some graphs over small domains, but not others.

For example, this works just fine:

ContourPlot3D[{x == y, x == -y}, {x, -10^-20, 10^-20}, {y, -10^-20, 10^-20}, {z, -10^-20, 10^-20}]


But when I try to zoom in on the intersection of some more complex surfaces…

f1[x_, y_, z_] := x + x*y + z - y*z - (Sqrt/4) (y^2 + 1)
f2[x_, y_, z_] := x^2 + y^2 - 1/2
f3[x_, y_, z_] := x - y - x*z - y*z
ContourPlot3D[{f1[x,y,z] == 0, f2[x,y,z] == 0, f3[x,y,z] == 0},
{x, 0.5058981, 0.5058982}, {y, 0.4940314, 0.4940315}, {z, 0.0118675, 0.0118676}]


…the result is sorta abstract expressionism: Increasing WorkingPrecision doesn't help.

Nor does making the entire graph 100× "bigger":

f1[x_, y_, z_] := x/100 + x/100*y/100 + z/100 - y/100*z/100 - (Sqrt/4) ((y/100)^2 + 1)
…
ContourPlot3D[{f1[x,y,z] == 0, f2[x,y,z] == 0, f3[x,y,z] == 0},
{x, 0.5058981*100, 0.5058982*100}, …


I have some plots with small features that I'd like to zoom in on. What's the best way to do that?

Edit - On further experimentation, it seems like the issue is distance from the origin, not complexity of the functions. E.g. ContourPlot3D[{x==y}, {x,-10^-7,10^-7}, {y,-10^-7,10^-7}, {z,-10^-7,10^-7}] works, but ContourPlot3D[{x==y}, {x,1-10^-7,1+10^-7}, {y,1-10^-7, 1+10^-7}, {z,-10^-7,10^-7}] is glitchy. (±10^-7 v.s. 1±10^-7) This suggests a floating point precision issue. But if it's a precision issue, why doesn't WorkingPrecision help?

• PlotPoints->100 Jul 19, 2021 at 3:12
• @david-g-stork That doesn't seem to help.
– ppm
Jul 19, 2021 at 16:46