edit error message
recast vanilla symbols as reals
add numerically_zero to randtest.py

It was initially tempting to compute an approximation for the error in
the expression by computing a value at n=2 and another at n=4 and taking
the difference, but the following shows how that can be unreliable:
with
>>> eq = -x - 1 + (-x**2 + 1)/(-x + 1) and
>>> r = {x: 148683004974611/S(50000000000000) -
...         144151475495133*I/1000000000000000}
>>> for maxn in range(1,100):
...   a, b = [z.n(i,maxn=maxn) for i in (2,4)]
...   if abs(b) > abs(b-a): print maxn
...
10
11
12
>>>

So at those values of maxn it looks like the computed value is larger than
the error in the computation. Unless there is a sound way to compute the
error in the expression (quickly) then this, at least, is *not* a way to do it.
allow prec=None to signify an autoestimate of the error