x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;\frac{z}{t} \le -8.51976868513873936 \cdot 10^{-131} \lor \neg \left(\frac{z}{t} \le -0.0\right):\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \left(z \cdot \left(y - x\right)\right) \cdot \frac{1}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r633720 = x;
double r633721 = y;
double r633722 = r633721 - r633720;
double r633723 = z;
double r633724 = t;
double r633725 = r633723 / r633724;
double r633726 = r633722 * r633725;
double r633727 = r633720 + r633726;
return r633727;
}
double f(double x, double y, double z, double t) {
double r633728 = z;
double r633729 = t;
double r633730 = r633728 / r633729;
double r633731 = -8.519768685138739e-131;
bool r633732 = r633730 <= r633731;
double r633733 = -0.0;
bool r633734 = r633730 <= r633733;
double r633735 = !r633734;
bool r633736 = r633732 || r633735;
double r633737 = x;
double r633738 = y;
double r633739 = r633738 - r633737;
double r633740 = r633739 * r633730;
double r633741 = r633737 + r633740;
double r633742 = r633728 * r633739;
double r633743 = 1.0;
double r633744 = r633743 / r633729;
double r633745 = r633742 * r633744;
double r633746 = r633737 + r633745;
double r633747 = r633736 ? r633741 : r633746;
return r633747;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.1 |
|---|---|
| Target | 2.3 |
| Herbie | 1.7 |
if (/ z t) < -8.519768685138739e-131 or -0.0 < (/ z t) Initial program 2.0
if -8.519768685138739e-131 < (/ z t) < -0.0Initial program 2.3
rmApplied *-un-lft-identity2.3
Applied add-cube-cbrt2.4
Applied times-frac2.4
Applied associate-*r*1.2
Simplified1.2
rmApplied div-inv1.2
Applied associate-*r*1.3
Simplified1.1
Final simplification1.7
herbie shell --seed 2020035
(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))))