x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;y \le -186062994224651239424:\\
\;\;\;\;\left(z - t\right) \cdot \frac{y}{a - t} + x\\
\mathbf{elif}\;y \le 1.22452106600687926588900523708060487951 \cdot 10^{-94}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{z - t}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r388559 = x;
double r388560 = y;
double r388561 = z;
double r388562 = t;
double r388563 = r388561 - r388562;
double r388564 = a;
double r388565 = r388564 - r388562;
double r388566 = r388563 / r388565;
double r388567 = r388560 * r388566;
double r388568 = r388559 + r388567;
return r388568;
}
double f(double x, double y, double z, double t, double a) {
double r388569 = y;
double r388570 = -1.8606299422465124e+20;
bool r388571 = r388569 <= r388570;
double r388572 = z;
double r388573 = t;
double r388574 = r388572 - r388573;
double r388575 = a;
double r388576 = r388575 - r388573;
double r388577 = r388569 / r388576;
double r388578 = r388574 * r388577;
double r388579 = x;
double r388580 = r388578 + r388579;
double r388581 = 1.2245210660068793e-94;
bool r388582 = r388569 <= r388581;
double r388583 = r388569 * r388574;
double r388584 = r388583 / r388576;
double r388585 = r388579 + r388584;
double r388586 = r388574 / r388576;
double r388587 = r388569 * r388586;
double r388588 = r388579 + r388587;
double r388589 = r388582 ? r388585 : r388588;
double r388590 = r388571 ? r388580 : r388589;
return r388590;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.4 |
|---|---|
| Target | 0.4 |
| Herbie | 1.0 |
if y < -1.8606299422465124e+20Initial program 0.8
rmApplied *-un-lft-identity0.8
Applied associate-*l*0.8
Simplified3.0
if -1.8606299422465124e+20 < y < 1.2245210660068793e-94Initial program 2.2
rmApplied associate-*r/0.3
if 1.2245210660068793e-94 < y Initial program 0.5
Final simplification1.0
herbie shell --seed 2019323
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< y -8.508084860551241e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.894426862792089e-49) (+ x (* (* y (- z t)) (/ 1 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))
(+ x (* y (/ (- z t) (- a t)))))