Reconsider how precision is done.

We want the precision to be just like our input, except when there are
hidden factors in the functions which will cause us to want much more.

Because of how we do this (via `eval`) the func list is almost certainly
wrong. Precisely defining our input is (still) yet to come.

Added some tests to show how we handle very small floats and other
related issues, plus a recommended test from an early issue comment
which I somehow missed.