x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;x \le -8.64219457899372803 \cdot 10^{-224} \lor \neg \left(x \le 1.6257691218099716 \cdot 10^{-308}\right):\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r547621 = x;
double r547622 = y;
double r547623 = r547622 - r547621;
double r547624 = z;
double r547625 = t;
double r547626 = r547624 / r547625;
double r547627 = r547623 * r547626;
double r547628 = r547621 + r547627;
return r547628;
}
double f(double x, double y, double z, double t) {
double r547629 = x;
double r547630 = -8.642194578993728e-224;
bool r547631 = r547629 <= r547630;
double r547632 = 1.6257691218099716e-308;
bool r547633 = r547629 <= r547632;
double r547634 = !r547633;
bool r547635 = r547631 || r547634;
double r547636 = y;
double r547637 = r547636 - r547629;
double r547638 = z;
double r547639 = t;
double r547640 = r547638 / r547639;
double r547641 = r547637 * r547640;
double r547642 = r547629 + r547641;
double r547643 = r547637 * r547638;
double r547644 = r547643 / r547639;
double r547645 = r547629 + r547644;
double r547646 = r547635 ? r547642 : r547645;
return r547646;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.0 |
|---|---|
| Target | 2.2 |
| Herbie | 2.0 |
if x < -8.642194578993728e-224 or 1.6257691218099716e-308 < x Initial program 1.7
if -8.642194578993728e-224 < x < 1.6257691218099716e-308Initial program 6.0
rmApplied associate-*r/5.5
Final simplification2.0
herbie shell --seed 2020056
(FPCore (x y z t)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"
:precision binary64
:herbie-target
(if (< (* (- y x) (/ z t)) -1013646692435.887) (+ x (/ (- y x) (/ t z))) (if (< (* (- y x) (/ z t)) -0.0) (+ x (/ (* (- y x) z) t)) (+ x (/ (- y x) (/ t z)))))
(+ x (* (- y x) (/ z t))))