x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -2.8458411894470345 \cdot 10^{-92} \lor \neg \left(a \le 1.3782715591853007 \cdot 10^{-120}\right):\\
\;\;\;\;x + \frac{1}{\frac{\frac{a - t}{z - t}}{y - x}}\\
\mathbf{else}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r688691 = x;
double r688692 = y;
double r688693 = r688692 - r688691;
double r688694 = z;
double r688695 = t;
double r688696 = r688694 - r688695;
double r688697 = r688693 * r688696;
double r688698 = a;
double r688699 = r688698 - r688695;
double r688700 = r688697 / r688699;
double r688701 = r688691 + r688700;
return r688701;
}
double f(double x, double y, double z, double t, double a) {
double r688702 = a;
double r688703 = -2.8458411894470345e-92;
bool r688704 = r688702 <= r688703;
double r688705 = 1.3782715591853007e-120;
bool r688706 = r688702 <= r688705;
double r688707 = !r688706;
bool r688708 = r688704 || r688707;
double r688709 = x;
double r688710 = 1.0;
double r688711 = t;
double r688712 = r688702 - r688711;
double r688713 = z;
double r688714 = r688713 - r688711;
double r688715 = r688712 / r688714;
double r688716 = y;
double r688717 = r688716 - r688709;
double r688718 = r688715 / r688717;
double r688719 = r688710 / r688718;
double r688720 = r688709 + r688719;
double r688721 = r688709 * r688713;
double r688722 = r688721 / r688711;
double r688723 = r688716 + r688722;
double r688724 = r688713 * r688716;
double r688725 = r688724 / r688711;
double r688726 = r688723 - r688725;
double r688727 = r688708 ? r688720 : r688726;
return r688727;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.2 |
|---|---|
| Target | 9.5 |
| Herbie | 10.8 |
if a < -2.8458411894470345e-92 or 1.3782715591853007e-120 < a Initial program 22.5
rmApplied associate-/l*8.8
rmApplied clear-num8.8
if -2.8458411894470345e-92 < a < 1.3782715591853007e-120Initial program 28.3
Taylor expanded around inf 15.7
Final simplification10.8
herbie shell --seed 2020100
(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))))