x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;t \le -33659643301491531166215560935505920 \lor \neg \left(t \le 1.625406329571911990929648461559105916592 \cdot 10^{-217}\right):\\
\;\;\;\;x + \frac{y - x}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{z}{\sqrt[3]{t}}\\
\mathbf{else}:\\
\;\;\;\;x + \left(\left(y - x\right) \cdot z\right) \cdot \frac{1}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r590593 = x;
double r590594 = y;
double r590595 = r590594 - r590593;
double r590596 = z;
double r590597 = t;
double r590598 = r590596 / r590597;
double r590599 = r590595 * r590598;
double r590600 = r590593 + r590599;
return r590600;
}
double f(double x, double y, double z, double t) {
double r590601 = t;
double r590602 = -3.365964330149153e+34;
bool r590603 = r590601 <= r590602;
double r590604 = 1.625406329571912e-217;
bool r590605 = r590601 <= r590604;
double r590606 = !r590605;
bool r590607 = r590603 || r590606;
double r590608 = x;
double r590609 = y;
double r590610 = r590609 - r590608;
double r590611 = cbrt(r590601);
double r590612 = r590611 * r590611;
double r590613 = r590610 / r590612;
double r590614 = z;
double r590615 = r590614 / r590611;
double r590616 = r590613 * r590615;
double r590617 = r590608 + r590616;
double r590618 = r590610 * r590614;
double r590619 = 1.0;
double r590620 = r590619 / r590601;
double r590621 = r590618 * r590620;
double r590622 = r590608 + r590621;
double r590623 = r590607 ? r590617 : r590622;
return r590623;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.0 |
|---|---|
| Target | 2.1 |
| Herbie | 2.5 |
if t < -3.365964330149153e+34 or 1.625406329571912e-217 < t Initial program 1.5
rmApplied add-cube-cbrt1.9
Applied *-un-lft-identity1.9
Applied times-frac1.9
Applied associate-*r*2.6
Simplified2.6
if -3.365964330149153e+34 < t < 1.625406329571912e-217Initial program 3.4
rmApplied div-inv3.5
Applied associate-*r*2.0
Final simplification2.5
herbie shell --seed 2020001
(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))))