x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}y \cdot \left(\left(z - t\right) \cdot \frac{1}{a - t}\right) + \mathsf{fma}\left(-x, \frac{z - t}{a - t}, x\right)double f(double x, double y, double z, double t, double a) {
double r504150 = x;
double r504151 = y;
double r504152 = r504151 - r504150;
double r504153 = z;
double r504154 = t;
double r504155 = r504153 - r504154;
double r504156 = r504152 * r504155;
double r504157 = a;
double r504158 = r504157 - r504154;
double r504159 = r504156 / r504158;
double r504160 = r504150 + r504159;
return r504160;
}
double f(double x, double y, double z, double t, double a) {
double r504161 = y;
double r504162 = z;
double r504163 = t;
double r504164 = r504162 - r504163;
double r504165 = 1.0;
double r504166 = a;
double r504167 = r504166 - r504163;
double r504168 = r504165 / r504167;
double r504169 = r504164 * r504168;
double r504170 = r504161 * r504169;
double r504171 = x;
double r504172 = -r504171;
double r504173 = r504164 / r504167;
double r504174 = fma(r504172, r504173, r504171);
double r504175 = r504170 + r504174;
return r504175;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.1 |
|---|---|
| Target | 9.0 |
| Herbie | 7.3 |
Initial program 24.1
Simplified14.6
rmApplied div-inv14.7
rmApplied add-cube-cbrt15.3
Applied associate-*r*15.3
rmApplied fma-udef15.3
Simplified11.5
rmApplied sub-neg11.5
Applied distribute-rgt-in11.5
Applied associate-+l+8.0
Simplified7.3
Final simplification7.3
herbie shell --seed 2020062 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))