x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}y \cdot \frac{1}{\frac{a - t}{z - t}} - \left(\frac{x}{\frac{a - t}{z - t}} - x\right)double f(double x, double y, double z, double t, double a) {
double r27325664 = x;
double r27325665 = y;
double r27325666 = r27325665 - r27325664;
double r27325667 = z;
double r27325668 = t;
double r27325669 = r27325667 - r27325668;
double r27325670 = r27325666 * r27325669;
double r27325671 = a;
double r27325672 = r27325671 - r27325668;
double r27325673 = r27325670 / r27325672;
double r27325674 = r27325664 + r27325673;
return r27325674;
}
double f(double x, double y, double z, double t, double a) {
double r27325675 = y;
double r27325676 = 1.0;
double r27325677 = a;
double r27325678 = t;
double r27325679 = r27325677 - r27325678;
double r27325680 = z;
double r27325681 = r27325680 - r27325678;
double r27325682 = r27325679 / r27325681;
double r27325683 = r27325676 / r27325682;
double r27325684 = r27325675 * r27325683;
double r27325685 = x;
double r27325686 = r27325685 / r27325682;
double r27325687 = r27325686 - r27325685;
double r27325688 = r27325684 - r27325687;
return r27325688;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.0 |
|---|---|
| Target | 9.5 |
| Herbie | 7.8 |
Initial program 24.0
Simplified12.0
rmApplied clear-num12.1
rmApplied fma-udef12.1
Simplified12.0
rmApplied div-sub12.0
Applied associate-+l-7.7
rmApplied div-inv7.8
Final simplification7.8
herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
: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))))