x + \frac{y \cdot \left(z - t\right)}{z - a}\begin{array}{l}
\mathbf{if}\;\frac{\left(z - t\right) \cdot y}{z - a} = -\infty \lor \neg \left(\frac{\left(z - t\right) \cdot y}{z - a} \le 2.497378485732866022141275700496591943343 \cdot 10^{230}\right):\\
\;\;\;\;x + \frac{y}{\frac{z - a}{z - t}}\\
\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 r498507 = x;
double r498508 = y;
double r498509 = z;
double r498510 = t;
double r498511 = r498509 - r498510;
double r498512 = r498508 * r498511;
double r498513 = a;
double r498514 = r498509 - r498513;
double r498515 = r498512 / r498514;
double r498516 = r498507 + r498515;
return r498516;
}
double f(double x, double y, double z, double t, double a) {
double r498517 = z;
double r498518 = t;
double r498519 = r498517 - r498518;
double r498520 = y;
double r498521 = r498519 * r498520;
double r498522 = a;
double r498523 = r498517 - r498522;
double r498524 = r498521 / r498523;
double r498525 = -inf.0;
bool r498526 = r498524 <= r498525;
double r498527 = 2.497378485732866e+230;
bool r498528 = r498524 <= r498527;
double r498529 = !r498528;
bool r498530 = r498526 || r498529;
double r498531 = x;
double r498532 = r498523 / r498519;
double r498533 = r498520 / r498532;
double r498534 = r498531 + r498533;
double r498535 = r498524 + r498531;
double r498536 = r498530 ? r498534 : r498535;
return r498536;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.5 |
|---|---|
| Target | 1.2 |
| Herbie | 0.4 |
if (/ (* y (- z t)) (- z a)) < -inf.0 or 2.497378485732866e+230 < (/ (* y (- z t)) (- z a)) Initial program 57.3
Simplified1.3
rmApplied fma-udef1.3
Simplified1.2
if -inf.0 < (/ (* y (- z t)) (- z a)) < 2.497378485732866e+230Initial program 0.2
Final simplification0.4
herbie shell --seed 2019194 +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))))