**Z-fighting**, also called **stitching**, is a phenomenon in 3D rendering that occurs when two or more primitives have similar values in the z-buffer. This problem is usually caused by limited sub-pixel precision and floating point and fixed point round-off errors. https://en.wikipedia.org/wiki/Z-fighting

There is very high precision at the *near* plane, but very little precision at the *far* plane. If the range [-n, -f] is getting larger, it causes a depth precision problem (z-fighting); a small change of z_{e} around the *far* plane does not affect on z_{n} value. The distance between *n* and *f* should be short as possible to minimize the depth buffer precision problem.

http://www.songho.ca/opengl/gl_projectionmatrix.html