x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;y \le -3.25568807915397534 \cdot 10^{87} \lor \neg \left(y \le 3.9183521668461886 \cdot 10^{-162}\right):\\
\;\;\;\;x + y \cdot \frac{z - t}{a - t}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r385240 = x;
double r385241 = y;
double r385242 = z;
double r385243 = t;
double r385244 = r385242 - r385243;
double r385245 = a;
double r385246 = r385245 - r385243;
double r385247 = r385244 / r385246;
double r385248 = r385241 * r385247;
double r385249 = r385240 + r385248;
return r385249;
}
double f(double x, double y, double z, double t, double a) {
double r385250 = y;
double r385251 = -3.2556880791539753e+87;
bool r385252 = r385250 <= r385251;
double r385253 = 3.9183521668461886e-162;
bool r385254 = r385250 <= r385253;
double r385255 = !r385254;
bool r385256 = r385252 || r385255;
double r385257 = x;
double r385258 = z;
double r385259 = t;
double r385260 = r385258 - r385259;
double r385261 = a;
double r385262 = r385261 - r385259;
double r385263 = r385260 / r385262;
double r385264 = r385250 * r385263;
double r385265 = r385257 + r385264;
double r385266 = r385250 * r385260;
double r385267 = r385266 / r385262;
double r385268 = r385257 + r385267;
double r385269 = r385256 ? r385265 : r385268;
return r385269;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.3 |
|---|---|
| Target | 0.4 |
| Herbie | 1.1 |
if y < -3.2556880791539753e+87 or 3.9183521668461886e-162 < y Initial program 0.8
if -3.2556880791539753e+87 < y < 3.9183521668461886e-162Initial program 1.8
rmApplied associate-*r/1.4
Final simplification1.1
herbie shell --seed 2019198
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"
:herbie-target
(if (< y -8.508084860551241e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.894426862792089e-49) (+ x (* (* y (- z t)) (/ 1.0 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))
(+ x (* y (/ (- z t) (- a t)))))