\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\begin{array}{l}
\mathbf{if}\;y \le 1.5801305016597386 \cdot 10^{-18}:\\
\;\;\;\;\left(x - \frac{1}{\frac{z \cdot 3}{y}}\right) + \frac{\frac{t}{z \cdot 3}}{y}\\
\mathbf{else}:\\
\;\;\;\;\left(x - \frac{y}{z \cdot 3}\right) + \frac{1}{z} \cdot \frac{\frac{t}{3}}{y}\\
\end{array}double f(double x, double y, double z, double t) {
double r518554 = x;
double r518555 = y;
double r518556 = z;
double r518557 = 3.0;
double r518558 = r518556 * r518557;
double r518559 = r518555 / r518558;
double r518560 = r518554 - r518559;
double r518561 = t;
double r518562 = r518558 * r518555;
double r518563 = r518561 / r518562;
double r518564 = r518560 + r518563;
return r518564;
}
double f(double x, double y, double z, double t) {
double r518565 = y;
double r518566 = 1.5801305016597386e-18;
bool r518567 = r518565 <= r518566;
double r518568 = x;
double r518569 = 1.0;
double r518570 = z;
double r518571 = 3.0;
double r518572 = r518570 * r518571;
double r518573 = r518572 / r518565;
double r518574 = r518569 / r518573;
double r518575 = r518568 - r518574;
double r518576 = t;
double r518577 = r518576 / r518572;
double r518578 = r518577 / r518565;
double r518579 = r518575 + r518578;
double r518580 = r518565 / r518572;
double r518581 = r518568 - r518580;
double r518582 = r518569 / r518570;
double r518583 = r518576 / r518571;
double r518584 = r518583 / r518565;
double r518585 = r518582 * r518584;
double r518586 = r518581 + r518585;
double r518587 = r518567 ? r518579 : r518586;
return r518587;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 3.9 |
|---|---|
| Target | 1.6 |
| Herbie | 1.2 |
if y < 1.5801305016597386e-18Initial program 5.1
rmApplied associate-/r*1.6
rmApplied clear-num1.6
if 1.5801305016597386e-18 < y Initial program 0.5
rmApplied associate-/r*1.6
rmApplied *-un-lft-identity1.6
Applied *-un-lft-identity1.6
Applied times-frac1.7
Applied times-frac0.2
Simplified0.2
Final simplification1.2
herbie shell --seed 2019198 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, H"
:herbie-target
(+ (- x (/ y (* z 3.0))) (/ (/ t (* z 3.0)) y))
(+ (- x (/ y (* z 3.0))) (/ t (* (* z 3.0) y))))