\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}\;x \le -2.4272481818337534 \cdot 10^{181}:\\
\;\;\;\;\mathsf{fma}\left(t, \left(x \cdot 18\right) \cdot \left(y \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}\;x \le 1.2900037542469239 \cdot 10^{120}:\\
\;\;\;\;\mathsf{fma}\left(t, \left(x \cdot \left(18 \cdot y\right)\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)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(t, 0 - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(j \cdot 27\right) \cdot k\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 r778740 = x;
double r778741 = 18.0;
double r778742 = r778740 * r778741;
double r778743 = y;
double r778744 = r778742 * r778743;
double r778745 = z;
double r778746 = r778744 * r778745;
double r778747 = t;
double r778748 = r778746 * r778747;
double r778749 = a;
double r778750 = 4.0;
double r778751 = r778749 * r778750;
double r778752 = r778751 * r778747;
double r778753 = r778748 - r778752;
double r778754 = b;
double r778755 = c;
double r778756 = r778754 * r778755;
double r778757 = r778753 + r778756;
double r778758 = r778740 * r778750;
double r778759 = i;
double r778760 = r778758 * r778759;
double r778761 = r778757 - r778760;
double r778762 = j;
double r778763 = 27.0;
double r778764 = r778762 * r778763;
double r778765 = k;
double r778766 = r778764 * r778765;
double r778767 = r778761 - r778766;
return r778767;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r778768 = x;
double r778769 = -2.4272481818337534e+181;
bool r778770 = r778768 <= r778769;
double r778771 = t;
double r778772 = 18.0;
double r778773 = r778768 * r778772;
double r778774 = y;
double r778775 = z;
double r778776 = r778774 * r778775;
double r778777 = r778773 * r778776;
double r778778 = a;
double r778779 = 4.0;
double r778780 = r778778 * r778779;
double r778781 = r778777 - r778780;
double r778782 = b;
double r778783 = c;
double r778784 = r778782 * r778783;
double r778785 = i;
double r778786 = r778779 * r778785;
double r778787 = j;
double r778788 = 27.0;
double r778789 = r778787 * r778788;
double r778790 = k;
double r778791 = r778789 * r778790;
double r778792 = fma(r778768, r778786, r778791);
double r778793 = r778784 - r778792;
double r778794 = fma(r778771, r778781, r778793);
double r778795 = 1.2900037542469239e+120;
bool r778796 = r778768 <= r778795;
double r778797 = r778772 * r778774;
double r778798 = r778768 * r778797;
double r778799 = r778798 * r778775;
double r778800 = r778799 - r778780;
double r778801 = r778788 * r778790;
double r778802 = r778787 * r778801;
double r778803 = fma(r778768, r778786, r778802);
double r778804 = r778784 - r778803;
double r778805 = fma(r778771, r778800, r778804);
double r778806 = 0.0;
double r778807 = r778806 - r778780;
double r778808 = fma(r778771, r778807, r778793);
double r778809 = r778796 ? r778805 : r778808;
double r778810 = r778770 ? r778794 : r778809;
return r778810;
}




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.5 |
|---|---|
| Target | 1.5 |
| Herbie | 4.9 |
if x < -2.4272481818337534e+181Initial program 18.7
Simplified18.7
rmApplied associate-*l*9.4
if -2.4272481818337534e+181 < x < 1.2900037542469239e+120Initial program 3.4
Simplified3.5
rmApplied associate-*l*3.5
rmApplied associate-*l*3.5
if 1.2900037542469239e+120 < x Initial program 18.2
Simplified18.2
Taylor expanded around 0 15.4
Final simplification4.9
herbie shell --seed 2020036 +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)))