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 r573055 = x;
double r573056 = y;
double r573057 = r573056 - r573055;
double r573058 = z;
double r573059 = t;
double r573060 = r573058 - r573059;
double r573061 = r573057 * r573060;
double r573062 = a;
double r573063 = r573062 - r573059;
double r573064 = r573061 / r573063;
double r573065 = r573055 + r573064;
return r573065;
}
double f(double x, double y, double z, double t, double a) {
double r573066 = y;
double r573067 = z;
double r573068 = t;
double r573069 = r573067 - r573068;
double r573070 = 1.0;
double r573071 = a;
double r573072 = r573071 - r573068;
double r573073 = r573070 / r573072;
double r573074 = r573069 * r573073;
double r573075 = r573066 * r573074;
double r573076 = x;
double r573077 = -r573076;
double r573078 = r573069 / r573072;
double r573079 = fma(r573077, r573078, r573076);
double r573080 = r573075 + r573079;
return r573080;
}




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))))