x + \frac{y \cdot \left(z - t\right)}{z - a}\begin{array}{l}
\mathbf{if}\;z \le -2.6661982335298339 \cdot 10^{-218} \lor \neg \left(z \le 4.6473611547607236 \cdot 10^{-162}\right):\\
\;\;\;\;\frac{\frac{z - t}{z - a}}{\frac{1}{y}} + x\\
\mathbf{else}:\\
\;\;\;\;\frac{z - t}{\frac{z - a}{y}} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r390528 = x;
double r390529 = y;
double r390530 = z;
double r390531 = t;
double r390532 = r390530 - r390531;
double r390533 = r390529 * r390532;
double r390534 = a;
double r390535 = r390530 - r390534;
double r390536 = r390533 / r390535;
double r390537 = r390528 + r390536;
return r390537;
}
double f(double x, double y, double z, double t, double a) {
double r390538 = z;
double r390539 = -2.666198233529834e-218;
bool r390540 = r390538 <= r390539;
double r390541 = 4.647361154760724e-162;
bool r390542 = r390538 <= r390541;
double r390543 = !r390542;
bool r390544 = r390540 || r390543;
double r390545 = t;
double r390546 = r390538 - r390545;
double r390547 = a;
double r390548 = r390538 - r390547;
double r390549 = r390546 / r390548;
double r390550 = 1.0;
double r390551 = y;
double r390552 = r390550 / r390551;
double r390553 = r390549 / r390552;
double r390554 = x;
double r390555 = r390553 + r390554;
double r390556 = r390548 / r390551;
double r390557 = r390546 / r390556;
double r390558 = r390557 + r390554;
double r390559 = r390544 ? r390555 : r390558;
return r390559;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.4 |
|---|---|
| Target | 1.2 |
| Herbie | 1.4 |
if z < -2.666198233529834e-218 or 4.647361154760724e-162 < z Initial program 11.9
Simplified2.9
rmApplied clear-num3.1
rmApplied fma-udef3.1
Simplified3.0
rmApplied div-inv3.0
Applied associate-/r*1.0
if -2.666198233529834e-218 < z < 4.647361154760724e-162Initial program 3.7
Simplified3.7
rmApplied clear-num3.9
rmApplied fma-udef3.9
Simplified3.7
Final simplification1.4
herbie shell --seed 2019198 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, A"
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (/ (* y (- z t)) (- z a))))