\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\begin{array}{l}
\mathbf{if}\;z \le -1.732584086606048716802629666375534253948 \cdot 10^{-30}:\\
\;\;\;\;x + \left(\frac{\frac{-y}{3}}{z} + \frac{\frac{t}{3 \cdot z}}{y}\right)\\
\mathbf{elif}\;z \le 2750296502407607091200:\\
\;\;\;\;\frac{\frac{\frac{t}{y}}{z}}{3} + \left(x - \frac{y}{3 \cdot z}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(0.3333333333333333148296162562473909929395, \frac{t}{z \cdot y} - \frac{y}{z}, x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r36201608 = x;
double r36201609 = y;
double r36201610 = z;
double r36201611 = 3.0;
double r36201612 = r36201610 * r36201611;
double r36201613 = r36201609 / r36201612;
double r36201614 = r36201608 - r36201613;
double r36201615 = t;
double r36201616 = r36201612 * r36201609;
double r36201617 = r36201615 / r36201616;
double r36201618 = r36201614 + r36201617;
return r36201618;
}
double f(double x, double y, double z, double t) {
double r36201619 = z;
double r36201620 = -1.7325840866060487e-30;
bool r36201621 = r36201619 <= r36201620;
double r36201622 = x;
double r36201623 = y;
double r36201624 = -r36201623;
double r36201625 = 3.0;
double r36201626 = r36201624 / r36201625;
double r36201627 = r36201626 / r36201619;
double r36201628 = t;
double r36201629 = r36201625 * r36201619;
double r36201630 = r36201628 / r36201629;
double r36201631 = r36201630 / r36201623;
double r36201632 = r36201627 + r36201631;
double r36201633 = r36201622 + r36201632;
double r36201634 = 2.750296502407607e+21;
bool r36201635 = r36201619 <= r36201634;
double r36201636 = r36201628 / r36201623;
double r36201637 = r36201636 / r36201619;
double r36201638 = r36201637 / r36201625;
double r36201639 = r36201623 / r36201629;
double r36201640 = r36201622 - r36201639;
double r36201641 = r36201638 + r36201640;
double r36201642 = 0.3333333333333333;
double r36201643 = r36201619 * r36201623;
double r36201644 = r36201628 / r36201643;
double r36201645 = r36201623 / r36201619;
double r36201646 = r36201644 - r36201645;
double r36201647 = fma(r36201642, r36201646, r36201622);
double r36201648 = r36201635 ? r36201641 : r36201647;
double r36201649 = r36201621 ? r36201633 : r36201648;
return r36201649;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 3.6 |
|---|---|
| Target | 1.8 |
| Herbie | 0.6 |
if z < -1.7325840866060487e-30Initial program 0.4
rmApplied associate-/r*0.9
rmApplied div-inv1.0
rmApplied sub-neg1.0
Applied associate-+l+1.0
Simplified0.9
if -1.7325840866060487e-30 < z < 2.750296502407607e+21Initial program 10.3
rmApplied associate-/r*3.3
rmApplied div-inv3.4
rmApplied associate-/r*3.4
rmApplied associate-*l/3.5
Simplified0.3
if 2.750296502407607e+21 < z Initial program 0.4
rmApplied associate-/r*1.1
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.6
herbie shell --seed 2019168 +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))))