\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k
\begin{array}{l}
\mathbf{if}\;t \le -5.60088969348530767 \cdot 10^{-115}:\\
\;\;\;\;\left(\mathsf{fma}\left(b, c, \left(18 \cdot t\right) \cdot \left(x \cdot \left(z \cdot y\right)\right) - \left(a \cdot 4\right) \cdot t\right) - \mathsf{fma}\left(j, 27 \cdot k, x \cdot \left(4 \cdot i\right)\right)\right) + \left(j \cdot 27\right) \cdot \left(\left(-k\right) + k\right)\\
\mathbf{elif}\;t \le 4188237234479459300:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot \left(t \cdot z\right) - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(18 \cdot t\right) \cdot \left(\left(x \cdot z\right) \cdot y\right) - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - x \cdot \left(4 \cdot i\right)\right) - \left(j \cdot 27\right) \cdot k\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r515693 = x;
double r515694 = 18.0;
double r515695 = r515693 * r515694;
double r515696 = y;
double r515697 = r515695 * r515696;
double r515698 = z;
double r515699 = r515697 * r515698;
double r515700 = t;
double r515701 = r515699 * r515700;
double r515702 = a;
double r515703 = 4.0;
double r515704 = r515702 * r515703;
double r515705 = r515704 * r515700;
double r515706 = r515701 - r515705;
double r515707 = b;
double r515708 = c;
double r515709 = r515707 * r515708;
double r515710 = r515706 + r515709;
double r515711 = r515693 * r515703;
double r515712 = i;
double r515713 = r515711 * r515712;
double r515714 = r515710 - r515713;
double r515715 = j;
double r515716 = 27.0;
double r515717 = r515715 * r515716;
double r515718 = k;
double r515719 = r515717 * r515718;
double r515720 = r515714 - r515719;
return r515720;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r515721 = t;
double r515722 = -5.600889693485308e-115;
bool r515723 = r515721 <= r515722;
double r515724 = b;
double r515725 = c;
double r515726 = 18.0;
double r515727 = r515726 * r515721;
double r515728 = x;
double r515729 = z;
double r515730 = y;
double r515731 = r515729 * r515730;
double r515732 = r515728 * r515731;
double r515733 = r515727 * r515732;
double r515734 = a;
double r515735 = 4.0;
double r515736 = r515734 * r515735;
double r515737 = r515736 * r515721;
double r515738 = r515733 - r515737;
double r515739 = fma(r515724, r515725, r515738);
double r515740 = j;
double r515741 = 27.0;
double r515742 = k;
double r515743 = r515741 * r515742;
double r515744 = i;
double r515745 = r515735 * r515744;
double r515746 = r515728 * r515745;
double r515747 = fma(r515740, r515743, r515746);
double r515748 = r515739 - r515747;
double r515749 = r515740 * r515741;
double r515750 = -r515742;
double r515751 = r515750 + r515742;
double r515752 = r515749 * r515751;
double r515753 = r515748 + r515752;
double r515754 = 4.1882372344794593e+18;
bool r515755 = r515721 <= r515754;
double r515756 = r515728 * r515726;
double r515757 = r515756 * r515730;
double r515758 = r515721 * r515729;
double r515759 = r515757 * r515758;
double r515760 = r515759 - r515737;
double r515761 = r515724 * r515725;
double r515762 = r515760 + r515761;
double r515763 = r515728 * r515735;
double r515764 = r515763 * r515744;
double r515765 = r515762 - r515764;
double r515766 = r515749 * r515742;
double r515767 = r515765 - r515766;
double r515768 = r515728 * r515729;
double r515769 = r515768 * r515730;
double r515770 = r515727 * r515769;
double r515771 = r515770 - r515737;
double r515772 = r515771 + r515761;
double r515773 = r515772 - r515746;
double r515774 = r515773 - r515766;
double r515775 = r515755 ? r515767 : r515774;
double r515776 = r515723 ? r515753 : r515775;
return r515776;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus i




Bits error versus j




Bits error versus k
| Original | 5.6 |
|---|---|
| Target | 1.5 |
| Herbie | 3.9 |
if t < -5.600889693485308e-115Initial program 3.3
Taylor expanded around inf 3.7
rmApplied associate-*r*3.7
rmApplied pow13.7
Applied pow13.7
Applied pow13.7
Applied pow-prod-down3.7
Applied pow-prod-down3.7
Simplified3.8
rmApplied add-sqr-sqrt33.9
Applied prod-diff33.9
Simplified3.9
Simplified3.9
if -5.600889693485308e-115 < t < 4.1882372344794593e+18Initial program 8.0
rmApplied associate-*l*4.5
Simplified4.5
if 4.1882372344794593e+18 < t Initial program 1.6
Taylor expanded around inf 1.8
rmApplied associate-*r*2.0
rmApplied pow12.0
Applied pow12.0
Applied pow12.0
Applied pow-prod-down2.0
Applied pow-prod-down2.0
Simplified2.1
rmApplied associate-*r*1.9
Final simplification3.9
herbie shell --seed 2019198 +o rules:numerics
(FPCore (x y z t a b c i j k)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, E"
:herbie-target
(if (< t -1.6210815397541398e-69) (- (- (* (* 18.0 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4.0)) (- (* (* k j) 27.0) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18.0 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4.0)) (- (* c b) (* 27.0 (* k j)))) (- (- (* (* 18.0 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4.0)) (- (* (* k j) 27.0) (* c b)))))
(- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)))