  In this article, we introduce a new technique for precision tuning. This
problem consists of finding the least data types for numerical values such that
the result of the computation satisfies some accuracy requirement. State of the
art techniques for precision tuning use a try and fail approach. They change
the data types of some variables of the program and evaluate the accuracy of
the result. Depending on what is obtained, they change more or less data types
and repeat the process. Our technique is radically different. Based on semantic
equations, we generate an Integer Linear Problem (ILP) from the program source
code. Basically, this is done by reasoning on the most significant bit and the
number of significant bits of the values which are integer quantities. The
integer solution to this problem, computed in polynomial time by a (real)
linear programming solver, gives the optimal data types at the bit level. A
finer set of semantic equations is also proposed which does not reduce directly
to an ILP problem. So we use policy iteration to find the solution. Both
techniques have been implemented and we show that our results encompass the
results of state of the art tools.
