\frac{x \cdot y - \left(z \cdot 9\right) \cdot t}{a \cdot 2}\begin{array}{l}
\mathbf{if}\;y \le -2.533105956566150453691798226802600655785 \cdot 10^{104}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{a}, \frac{y}{2}, \frac{-1}{a} \cdot \left(\frac{t}{2} \cdot \left(z \cdot 9\right)\right)\right)\\
\mathbf{elif}\;y \le -3.885985235426316444017397086779776257223 \cdot 10^{-193}:\\
\;\;\;\;\mathsf{fma}\left(x \cdot y, \frac{1}{a \cdot 2}, -\frac{t}{2} \cdot \frac{z \cdot 9}{a}\right) + \frac{z \cdot 9}{a} \cdot \left(\left(-\frac{t}{2}\right) + \frac{t}{2}\right)\\
\mathbf{elif}\;y \le 8.871629807142084181809158432334469804898 \cdot 10^{-27}:\\
\;\;\;\;\frac{x \cdot y}{a \cdot 2} - 4.5 \cdot \frac{t \cdot z}{a}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{a}, \frac{y}{2}, \left(-\frac{t}{2}\right) \cdot \frac{z}{\frac{a}{9}}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r576600 = x;
double r576601 = y;
double r576602 = r576600 * r576601;
double r576603 = z;
double r576604 = 9.0;
double r576605 = r576603 * r576604;
double r576606 = t;
double r576607 = r576605 * r576606;
double r576608 = r576602 - r576607;
double r576609 = a;
double r576610 = 2.0;
double r576611 = r576609 * r576610;
double r576612 = r576608 / r576611;
return r576612;
}
double f(double x, double y, double z, double t, double a) {
double r576613 = y;
double r576614 = -2.5331059565661505e+104;
bool r576615 = r576613 <= r576614;
double r576616 = x;
double r576617 = a;
double r576618 = r576616 / r576617;
double r576619 = 2.0;
double r576620 = r576613 / r576619;
double r576621 = -1.0;
double r576622 = r576621 / r576617;
double r576623 = t;
double r576624 = r576623 / r576619;
double r576625 = z;
double r576626 = 9.0;
double r576627 = r576625 * r576626;
double r576628 = r576624 * r576627;
double r576629 = r576622 * r576628;
double r576630 = fma(r576618, r576620, r576629);
double r576631 = -3.8859852354263164e-193;
bool r576632 = r576613 <= r576631;
double r576633 = r576616 * r576613;
double r576634 = 1.0;
double r576635 = r576617 * r576619;
double r576636 = r576634 / r576635;
double r576637 = r576627 / r576617;
double r576638 = r576624 * r576637;
double r576639 = -r576638;
double r576640 = fma(r576633, r576636, r576639);
double r576641 = -r576624;
double r576642 = r576641 + r576624;
double r576643 = r576637 * r576642;
double r576644 = r576640 + r576643;
double r576645 = 8.871629807142084e-27;
bool r576646 = r576613 <= r576645;
double r576647 = r576633 / r576635;
double r576648 = 4.5;
double r576649 = r576623 * r576625;
double r576650 = r576649 / r576617;
double r576651 = r576648 * r576650;
double r576652 = r576647 - r576651;
double r576653 = r576617 / r576626;
double r576654 = r576625 / r576653;
double r576655 = r576641 * r576654;
double r576656 = fma(r576618, r576620, r576655);
double r576657 = r576646 ? r576652 : r576656;
double r576658 = r576632 ? r576644 : r576657;
double r576659 = r576615 ? r576630 : r576658;
return r576659;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 7.8 |
|---|---|
| Target | 5.8 |
| Herbie | 5.9 |
if y < -2.5331059565661505e+104Initial program 15.7
rmApplied div-sub15.7
rmApplied times-frac8.9
Applied fma-neg8.9
Simplified6.6
rmApplied div-inv6.6
Applied associate-*r*8.9
if -2.5331059565661505e+104 < y < -3.8859852354263164e-193Initial program 5.6
rmApplied div-sub5.6
rmApplied add-cube-cbrt6.0
Applied div-inv6.1
Applied prod-diff6.1
Simplified9.5
Simplified5.7
if -3.8859852354263164e-193 < y < 8.871629807142084e-27Initial program 4.7
rmApplied div-sub4.7
Taylor expanded around 0 4.7
if 8.871629807142084e-27 < y Initial program 10.5
rmApplied div-sub10.5
rmApplied times-frac7.9
Applied fma-neg7.9
Simplified6.4
rmApplied associate-/l*6.3
Final simplification5.9
herbie shell --seed 2019209 +o rules:numerics
(FPCore (x y z t a)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, I"
:precision binary64
:herbie-target
(if (< a -2.090464557976709e86) (- (* 0.5 (/ (* y x) a)) (* 4.5 (/ t (/ a z)))) (if (< a 2.14403070783397609e99) (/ (- (* x y) (* z (* 9 t))) (* a 2)) (- (* (/ y a) (* x 0.5)) (* (/ t a) (* z 4.5)))))
(/ (- (* x y) (* (* z 9) t)) (* a 2)))