\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 -2.5613291814136577 \cdot 10^{-127}:\\
\;\;\;\;\mathsf{fma}\left(t, x \cdot \left(\left(18 \cdot y\right) \cdot z\right) - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(j \cdot 27\right) \cdot k\right)\right)\\
\mathbf{elif}\;t \le 2.4037056843120258 \cdot 10^{-98}:\\
\;\;\;\;\mathsf{fma}\left(t, 0 - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, j \cdot \left(27 \cdot k\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(t, \left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, j \cdot \left(27 \cdot k\right)\right)\right)\\
\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 r777720 = x;
double r777721 = 18.0;
double r777722 = r777720 * r777721;
double r777723 = y;
double r777724 = r777722 * r777723;
double r777725 = z;
double r777726 = r777724 * r777725;
double r777727 = t;
double r777728 = r777726 * r777727;
double r777729 = a;
double r777730 = 4.0;
double r777731 = r777729 * r777730;
double r777732 = r777731 * r777727;
double r777733 = r777728 - r777732;
double r777734 = b;
double r777735 = c;
double r777736 = r777734 * r777735;
double r777737 = r777733 + r777736;
double r777738 = r777720 * r777730;
double r777739 = i;
double r777740 = r777738 * r777739;
double r777741 = r777737 - r777740;
double r777742 = j;
double r777743 = 27.0;
double r777744 = r777742 * r777743;
double r777745 = k;
double r777746 = r777744 * r777745;
double r777747 = r777741 - r777746;
return r777747;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r777748 = t;
double r777749 = -2.5613291814136577e-127;
bool r777750 = r777748 <= r777749;
double r777751 = x;
double r777752 = 18.0;
double r777753 = y;
double r777754 = r777752 * r777753;
double r777755 = z;
double r777756 = r777754 * r777755;
double r777757 = r777751 * r777756;
double r777758 = a;
double r777759 = 4.0;
double r777760 = r777758 * r777759;
double r777761 = r777757 - r777760;
double r777762 = b;
double r777763 = c;
double r777764 = r777762 * r777763;
double r777765 = i;
double r777766 = r777759 * r777765;
double r777767 = j;
double r777768 = 27.0;
double r777769 = r777767 * r777768;
double r777770 = k;
double r777771 = r777769 * r777770;
double r777772 = fma(r777751, r777766, r777771);
double r777773 = r777764 - r777772;
double r777774 = fma(r777748, r777761, r777773);
double r777775 = 2.4037056843120258e-98;
bool r777776 = r777748 <= r777775;
double r777777 = 0.0;
double r777778 = r777777 - r777760;
double r777779 = r777768 * r777770;
double r777780 = r777767 * r777779;
double r777781 = fma(r777751, r777766, r777780);
double r777782 = r777764 - r777781;
double r777783 = fma(r777748, r777778, r777782);
double r777784 = r777751 * r777752;
double r777785 = r777784 * r777753;
double r777786 = r777785 * r777755;
double r777787 = r777786 - r777760;
double r777788 = fma(r777748, r777787, r777782);
double r777789 = r777776 ? r777783 : r777788;
double r777790 = r777750 ? r777774 : r777789;
return r777790;
}




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.7 |
|---|---|
| Target | 1.6 |
| Herbie | 4.7 |
if t < -2.5613291814136577e-127Initial program 3.2
Simplified3.3
rmApplied associate-*l*3.3
rmApplied associate-*l*4.2
if -2.5613291814136577e-127 < t < 2.4037056843120258e-98Initial program 9.3
Simplified9.3
rmApplied associate-*l*9.4
Taylor expanded around 0 6.1
if 2.4037056843120258e-98 < t Initial program 3.0
Simplified3.0
rmApplied associate-*l*3.1
Final simplification4.7
herbie shell --seed 2020064 +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"
:precision binary64
:herbie-target
(if (< t -1.6210815397541398e-69) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4)) (- (* c b) (* 27 (* k j)))) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b)))))
(- (- (+ (- (* (* (* (* x 18) y) z) t) (* (* a 4) t)) (* b c)) (* (* x 4) i)) (* (* j 27) k)))