x + y \cdot \frac{z - t}{z - a}\begin{array}{l}
\mathbf{if}\;z \le -6.964036638581209574726043986735525528163 \cdot 10^{-102} \lor \neg \left(z \le 9.403031276241487005540332044897243661846 \cdot 10^{-164}\right):\\
\;\;\;\;x + y \cdot \frac{z - t}{z - a}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\sqrt[3]{z - a} \cdot \sqrt[3]{z - a}} \cdot \frac{z - t}{\sqrt[3]{z - a}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r382525 = x;
double r382526 = y;
double r382527 = z;
double r382528 = t;
double r382529 = r382527 - r382528;
double r382530 = a;
double r382531 = r382527 - r382530;
double r382532 = r382529 / r382531;
double r382533 = r382526 * r382532;
double r382534 = r382525 + r382533;
return r382534;
}
double f(double x, double y, double z, double t, double a) {
double r382535 = z;
double r382536 = -6.9640366385812096e-102;
bool r382537 = r382535 <= r382536;
double r382538 = 9.403031276241487e-164;
bool r382539 = r382535 <= r382538;
double r382540 = !r382539;
bool r382541 = r382537 || r382540;
double r382542 = x;
double r382543 = y;
double r382544 = t;
double r382545 = r382535 - r382544;
double r382546 = a;
double r382547 = r382535 - r382546;
double r382548 = r382545 / r382547;
double r382549 = r382543 * r382548;
double r382550 = r382542 + r382549;
double r382551 = cbrt(r382547);
double r382552 = r382551 * r382551;
double r382553 = r382543 / r382552;
double r382554 = r382545 / r382551;
double r382555 = r382553 * r382554;
double r382556 = r382542 + r382555;
double r382557 = r382541 ? r382550 : r382556;
return r382557;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.5 |
|---|---|
| Target | 1.4 |
| Herbie | 1.3 |
if z < -6.9640366385812096e-102 or 9.403031276241487e-164 < z Initial program 0.5
if -6.9640366385812096e-102 < z < 9.403031276241487e-164Initial program 4.4
rmApplied add-cube-cbrt4.8
Applied *-un-lft-identity4.8
Applied times-frac4.8
Applied associate-*r*3.5
Simplified3.4
Final simplification1.3
herbie shell --seed 2019306
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, A"
:precision binary64
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (* y (/ (- z t) (- z a)))))