x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\frac{z}{a - t} \cdot \left(y - x\right) + \mathsf{fma}\left(y - x, -\frac{t}{a - t}, x\right)double f(double x, double y, double z, double t, double a) {
double r649703 = x;
double r649704 = y;
double r649705 = r649704 - r649703;
double r649706 = z;
double r649707 = t;
double r649708 = r649706 - r649707;
double r649709 = r649705 * r649708;
double r649710 = a;
double r649711 = r649710 - r649707;
double r649712 = r649709 / r649711;
double r649713 = r649703 + r649712;
return r649713;
}
double f(double x, double y, double z, double t, double a) {
double r649714 = z;
double r649715 = a;
double r649716 = t;
double r649717 = r649715 - r649716;
double r649718 = r649714 / r649717;
double r649719 = y;
double r649720 = x;
double r649721 = r649719 - r649720;
double r649722 = r649718 * r649721;
double r649723 = r649716 / r649717;
double r649724 = -r649723;
double r649725 = fma(r649721, r649724, r649720);
double r649726 = r649722 + r649725;
return r649726;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.2 |
|---|---|
| Target | 9.3 |
| Herbie | 8.5 |
Initial program 24.2
Simplified14.6
rmApplied fma-udef14.7
rmApplied div-inv14.7
Applied associate-*l*11.7
Simplified11.6
rmApplied div-sub11.6
rmApplied sub-neg11.6
Applied distribute-rgt-in11.6
Applied associate-+l+8.6
Simplified8.5
Final simplification8.5
herbie shell --seed 2020045 +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))))