x + y \cdot \frac{z - t}{z - a}\begin{array}{l}
\mathbf{if}\;y \le -2.15499137832583823 \cdot 10^{-103} \lor \neg \left(y \le 64647305041162224\right):\\
\;\;\;\;\frac{y}{\frac{z - a}{z - t}} + x\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(z - t\right) \cdot y}{z - a} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r393464 = x;
double r393465 = y;
double r393466 = z;
double r393467 = t;
double r393468 = r393466 - r393467;
double r393469 = a;
double r393470 = r393466 - r393469;
double r393471 = r393468 / r393470;
double r393472 = r393465 * r393471;
double r393473 = r393464 + r393472;
return r393473;
}
double f(double x, double y, double z, double t, double a) {
double r393474 = y;
double r393475 = -2.1549913783258382e-103;
bool r393476 = r393474 <= r393475;
double r393477 = 6.464730504116222e+16;
bool r393478 = r393474 <= r393477;
double r393479 = !r393478;
bool r393480 = r393476 || r393479;
double r393481 = z;
double r393482 = a;
double r393483 = r393481 - r393482;
double r393484 = t;
double r393485 = r393481 - r393484;
double r393486 = r393483 / r393485;
double r393487 = r393474 / r393486;
double r393488 = x;
double r393489 = r393487 + r393488;
double r393490 = r393485 * r393474;
double r393491 = r393490 / r393483;
double r393492 = r393491 + r393488;
double r393493 = r393480 ? r393489 : r393492;
return r393493;
}




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 | 1.2 |
| Herbie | 0.5 |
if y < -2.1549913783258382e-103 or 6.464730504116222e+16 < y Initial program 0.6
Simplified0.6
rmApplied clear-num0.7
rmApplied fma-udef0.7
Simplified0.7
if -2.1549913783258382e-103 < y < 6.464730504116222e+16Initial program 2.1
Simplified2.1
rmApplied div-sub2.1
rmApplied fma-udef2.1
rmApplied sub-div2.1
Applied associate-*l/0.3
Final simplification0.5
herbie shell --seed 2019199 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, A"
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (* y (/ (- z t) (- z a)))))