\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27\right) \cdot b
\begin{array}{l}
\mathbf{if}\;t \le -6.4129760095180493 \cdot 10^{-217}:\\
\;\;\;\;\mathsf{fma}\left(2, x, 27 \cdot \left(a \cdot b\right) - 9 \cdot \left(t \cdot \left(z \cdot y\right)\right)\right)\\
\mathbf{elif}\;t \le 2.4602073916559479 \cdot 10^{-15}:\\
\;\;\;\;\mathsf{fma}\left(2, x, 27 \cdot \left(a \cdot b\right) - {\left(\left(9 \cdot \left(t \cdot y\right)\right) \cdot z\right)}^{1}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(2, x, 27 \cdot \left(a \cdot b\right) - \left(\sqrt[3]{9} \cdot \sqrt[3]{9}\right) \cdot \left(\sqrt[3]{9} \cdot \left(t \cdot \left(z \cdot y\right)\right)\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r847720 = x;
double r847721 = 2.0;
double r847722 = r847720 * r847721;
double r847723 = y;
double r847724 = 9.0;
double r847725 = r847723 * r847724;
double r847726 = z;
double r847727 = r847725 * r847726;
double r847728 = t;
double r847729 = r847727 * r847728;
double r847730 = r847722 - r847729;
double r847731 = a;
double r847732 = 27.0;
double r847733 = r847731 * r847732;
double r847734 = b;
double r847735 = r847733 * r847734;
double r847736 = r847730 + r847735;
return r847736;
}
double f(double x, double y, double z, double t, double a, double b) {
double r847737 = t;
double r847738 = -6.412976009518049e-217;
bool r847739 = r847737 <= r847738;
double r847740 = 2.0;
double r847741 = x;
double r847742 = 27.0;
double r847743 = a;
double r847744 = b;
double r847745 = r847743 * r847744;
double r847746 = r847742 * r847745;
double r847747 = 9.0;
double r847748 = z;
double r847749 = y;
double r847750 = r847748 * r847749;
double r847751 = r847737 * r847750;
double r847752 = r847747 * r847751;
double r847753 = r847746 - r847752;
double r847754 = fma(r847740, r847741, r847753);
double r847755 = 2.460207391655948e-15;
bool r847756 = r847737 <= r847755;
double r847757 = r847737 * r847749;
double r847758 = r847747 * r847757;
double r847759 = r847758 * r847748;
double r847760 = 1.0;
double r847761 = pow(r847759, r847760);
double r847762 = r847746 - r847761;
double r847763 = fma(r847740, r847741, r847762);
double r847764 = cbrt(r847747);
double r847765 = r847764 * r847764;
double r847766 = r847764 * r847751;
double r847767 = r847765 * r847766;
double r847768 = r847746 - r847767;
double r847769 = fma(r847740, r847741, r847768);
double r847770 = r847756 ? r847763 : r847769;
double r847771 = r847739 ? r847754 : r847770;
return r847771;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 3.8 |
|---|---|
| Target | 2.5 |
| Herbie | 1.4 |
if t < -6.412976009518049e-217Initial program 2.8
Simplified2.8
Taylor expanded around inf 2.7
Simplified2.7
if -6.412976009518049e-217 < t < 2.460207391655948e-15Initial program 6.7
Simplified6.6
Taylor expanded around inf 6.5
Simplified6.5
rmApplied add-cube-cbrt6.5
Applied associate-*l*6.5
rmApplied pow16.5
Applied pow16.5
Applied pow-prod-down6.5
Applied pow16.5
Applied pow-prod-down6.5
Applied pow16.5
Applied pow-prod-down6.5
Applied pow16.5
Applied pow16.5
Applied pow-prod-down6.5
Applied pow-prod-down6.5
Simplified0.4
if 2.460207391655948e-15 < t Initial program 0.7
Simplified0.8
Taylor expanded around inf 0.6
Simplified0.6
rmApplied add-cube-cbrt0.6
Applied associate-*l*0.6
Final simplification1.4
herbie shell --seed 2020027 +o rules:numerics
(FPCore (x y z t a b)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, A"
:precision binary64
:herbie-target
(if (< y 7.590524218811189e-161) (+ (- (* x 2) (* (* (* y 9) z) t)) (* a (* 27 b))) (+ (- (* x 2) (* 9 (* y (* t z)))) (* (* a 27) b)))
(+ (- (* x 2) (* (* (* y 9) z) t)) (* (* a 27) b)))