Tuning Floating-Point Precision Using Dynamic Program Information and Temporal Locality