\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\begin{array}{l}
\mathbf{if}\;z \cdot 3 \le 5.139606151127303520398748598797844304667 \cdot 10^{-106}:\\
\;\;\;\;\left(x - \frac{y}{z \cdot 3}\right) + \frac{\frac{t}{z \cdot 3}}{y}\\
\mathbf{else}:\\
\;\;\;\;\left(x - \frac{\frac{y}{z}}{3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\\
\end{array}double f(double x, double y, double z, double t) {
double r1745531 = x;
double r1745532 = y;
double r1745533 = z;
double r1745534 = 3.0;
double r1745535 = r1745533 * r1745534;
double r1745536 = r1745532 / r1745535;
double r1745537 = r1745531 - r1745536;
double r1745538 = t;
double r1745539 = r1745535 * r1745532;
double r1745540 = r1745538 / r1745539;
double r1745541 = r1745537 + r1745540;
return r1745541;
}
double f(double x, double y, double z, double t) {
double r1745542 = z;
double r1745543 = 3.0;
double r1745544 = r1745542 * r1745543;
double r1745545 = 5.139606151127304e-106;
bool r1745546 = r1745544 <= r1745545;
double r1745547 = x;
double r1745548 = y;
double r1745549 = r1745548 / r1745544;
double r1745550 = r1745547 - r1745549;
double r1745551 = t;
double r1745552 = r1745551 / r1745544;
double r1745553 = r1745552 / r1745548;
double r1745554 = r1745550 + r1745553;
double r1745555 = r1745548 / r1745542;
double r1745556 = r1745555 / r1745543;
double r1745557 = r1745547 - r1745556;
double r1745558 = r1745544 * r1745548;
double r1745559 = r1745551 / r1745558;
double r1745560 = r1745557 + r1745559;
double r1745561 = r1745546 ? r1745554 : r1745560;
return r1745561;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 3.7 |
|---|---|
| Target | 1.9 |
| Herbie | 1.7 |
if (* z 3.0) < 5.139606151127304e-106Initial program 5.7
rmApplied associate-/r*2.3
if 5.139606151127304e-106 < (* z 3.0) Initial program 1.0
rmApplied associate-/r*1.0
Final simplification1.7
herbie shell --seed 2019235
(FPCore (x y z t)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, H"
:precision binary64
:herbie-target
(+ (- x (/ y (* z 3))) (/ (/ t (* z 3)) y))
(+ (- x (/ y (* z 3))) (/ t (* (* z 3) y))))