x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;x \le -6.34892836660075745 \cdot 10^{-104} \lor \neg \left(x \le 3.87544783988843796 \cdot 10^{-103}\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 r535994 = x;
double r535995 = y;
double r535996 = r535995 - r535994;
double r535997 = z;
double r535998 = t;
double r535999 = r535997 / r535998;
double r536000 = r535996 * r535999;
double r536001 = r535994 + r536000;
return r536001;
}
double f(double x, double y, double z, double t) {
double r536002 = x;
double r536003 = -6.348928366600757e-104;
bool r536004 = r536002 <= r536003;
double r536005 = 3.875447839888438e-103;
bool r536006 = r536002 <= r536005;
double r536007 = !r536006;
bool r536008 = r536004 || r536007;
double r536009 = y;
double r536010 = r536009 - r536002;
double r536011 = z;
double r536012 = t;
double r536013 = r536011 / r536012;
double r536014 = r536010 * r536013;
double r536015 = r536002 + r536014;
double r536016 = cbrt(r536012);
double r536017 = r536016 * r536016;
double r536018 = r536010 / r536017;
double r536019 = r536011 / r536016;
double r536020 = r536018 * r536019;
double r536021 = r536002 + r536020;
double r536022 = r536008 ? r536015 : r536021;
return r536022;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 1.9 |
|---|---|
| Target | 2.0 |
| Herbie | 1.9 |
if x < -6.348928366600757e-104 or 3.875447839888438e-103 < x Initial program 0.5
if -6.348928366600757e-104 < x < 3.875447839888438e-103Initial program 4.2
rmApplied add-cube-cbrt4.9
Applied *-un-lft-identity4.9
Applied times-frac4.9
Applied associate-*r*4.1
Simplified4.1
Final simplification1.9
herbie shell --seed 2020081
(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))))