x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;x \le -1.1131496519401694 \cdot 10^{-128} \lor \neg \left(x \le 1.1326421016751084 \cdot 10^{-125}\right):\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y - x}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{z}{\sqrt[3]{t}}\\
\end{array}double f(double x, double y, double z, double t) {
double r651867 = x;
double r651868 = y;
double r651869 = r651868 - r651867;
double r651870 = z;
double r651871 = t;
double r651872 = r651870 / r651871;
double r651873 = r651869 * r651872;
double r651874 = r651867 + r651873;
return r651874;
}
double f(double x, double y, double z, double t) {
double r651875 = x;
double r651876 = -1.1131496519401694e-128;
bool r651877 = r651875 <= r651876;
double r651878 = 1.1326421016751084e-125;
bool r651879 = r651875 <= r651878;
double r651880 = !r651879;
bool r651881 = r651877 || r651880;
double r651882 = y;
double r651883 = r651882 - r651875;
double r651884 = z;
double r651885 = t;
double r651886 = r651884 / r651885;
double r651887 = r651883 * r651886;
double r651888 = r651875 + r651887;
double r651889 = cbrt(r651885);
double r651890 = r651889 * r651889;
double r651891 = r651883 / r651890;
double r651892 = r651884 / r651889;
double r651893 = r651891 * r651892;
double r651894 = r651875 + r651893;
double r651895 = r651881 ? r651888 : r651894;
return r651895;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 1.8 |
|---|---|
| Target | 2.0 |
| Herbie | 1.6 |
if x < -1.1131496519401694e-128 or 1.1326421016751084e-125 < x Initial program 0.6
if -1.1131496519401694e-128 < x < 1.1326421016751084e-125Initial program 4.5
rmApplied add-cube-cbrt5.2
Applied *-un-lft-identity5.2
Applied times-frac5.2
Applied associate-*r*3.6
Simplified3.6
Final simplification1.6
herbie shell --seed 2020025
(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))))