x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -2.15581041850521283 \cdot 10^{-207} \lor \neg \left(a \le 6.9458215513660829 \cdot 10^{-117}\right):\\
\;\;\;\;\left(y - x\right) \cdot \frac{z - t}{a - t} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{t}, z, y - \frac{z \cdot y}{t}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r600603 = x;
double r600604 = y;
double r600605 = r600604 - r600603;
double r600606 = z;
double r600607 = t;
double r600608 = r600606 - r600607;
double r600609 = r600605 * r600608;
double r600610 = a;
double r600611 = r600610 - r600607;
double r600612 = r600609 / r600611;
double r600613 = r600603 + r600612;
return r600613;
}
double f(double x, double y, double z, double t, double a) {
double r600614 = a;
double r600615 = -2.155810418505213e-207;
bool r600616 = r600614 <= r600615;
double r600617 = 6.945821551366083e-117;
bool r600618 = r600614 <= r600617;
double r600619 = !r600618;
bool r600620 = r600616 || r600619;
double r600621 = y;
double r600622 = x;
double r600623 = r600621 - r600622;
double r600624 = z;
double r600625 = t;
double r600626 = r600624 - r600625;
double r600627 = r600614 - r600625;
double r600628 = r600626 / r600627;
double r600629 = r600623 * r600628;
double r600630 = r600629 + r600622;
double r600631 = r600622 / r600625;
double r600632 = r600624 * r600621;
double r600633 = r600632 / r600625;
double r600634 = r600621 - r600633;
double r600635 = fma(r600631, r600624, r600634);
double r600636 = r600620 ? r600630 : r600635;
return r600636;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.4 |
|---|---|
| Target | 9.2 |
| Herbie | 10.1 |
if a < -2.155810418505213e-207 or 6.945821551366083e-117 < a Initial program 22.9
Simplified11.7
rmApplied fma-udef11.8
rmApplied div-inv11.8
Applied associate-*l*9.3
Simplified9.2
if -2.155810418505213e-207 < a < 6.945821551366083e-117Initial program 30.1
Simplified25.0
rmApplied fma-udef24.9
rmApplied div-inv25.0
Applied associate-*l*20.3
Simplified20.3
Taylor expanded around inf 14.3
Simplified13.4
Final simplification10.1
herbie shell --seed 2020089 +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))))