\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k
\begin{array}{l}
\mathbf{if}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i = -\infty:\\
\;\;\;\;\mathsf{fma}\left(b, c, \left(\left(t \cdot x\right) \cdot \left(y \cdot 18.0\right)\right) \cdot z - \mathsf{fma}\left(4.0, \mathsf{fma}\left(t, a, x \cdot i\right), 27.0 \cdot \left(k \cdot j\right)\right)\right)\\
\mathbf{elif}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i \le 2.403209667818115 \cdot 10^{+294}:\\
\;\;\;\;\left(\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i\right) - j \cdot \left(27.0 \cdot k\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(c \cdot b + \left(\left(y \cdot \left(\left(z \cdot x\right) \cdot t\right)\right) \cdot 18.0 - \left(a \cdot 4.0\right) \cdot t\right)\right) - \left(x \cdot 4.0\right) \cdot i\right) - \sqrt[3]{\left(k \cdot j\right) \cdot \left(27.0 \cdot \left(\left(27.0 \cdot \left(k \cdot j\right)\right) \cdot \left(27.0 \cdot \left(k \cdot j\right)\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 r35392756 = x;
double r35392757 = 18.0;
double r35392758 = r35392756 * r35392757;
double r35392759 = y;
double r35392760 = r35392758 * r35392759;
double r35392761 = z;
double r35392762 = r35392760 * r35392761;
double r35392763 = t;
double r35392764 = r35392762 * r35392763;
double r35392765 = a;
double r35392766 = 4.0;
double r35392767 = r35392765 * r35392766;
double r35392768 = r35392767 * r35392763;
double r35392769 = r35392764 - r35392768;
double r35392770 = b;
double r35392771 = c;
double r35392772 = r35392770 * r35392771;
double r35392773 = r35392769 + r35392772;
double r35392774 = r35392756 * r35392766;
double r35392775 = i;
double r35392776 = r35392774 * r35392775;
double r35392777 = r35392773 - r35392776;
double r35392778 = j;
double r35392779 = 27.0;
double r35392780 = r35392778 * r35392779;
double r35392781 = k;
double r35392782 = r35392780 * r35392781;
double r35392783 = r35392777 - r35392782;
return r35392783;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r35392784 = t;
double r35392785 = x;
double r35392786 = 18.0;
double r35392787 = r35392785 * r35392786;
double r35392788 = y;
double r35392789 = r35392787 * r35392788;
double r35392790 = z;
double r35392791 = r35392789 * r35392790;
double r35392792 = r35392784 * r35392791;
double r35392793 = a;
double r35392794 = 4.0;
double r35392795 = r35392793 * r35392794;
double r35392796 = r35392795 * r35392784;
double r35392797 = r35392792 - r35392796;
double r35392798 = c;
double r35392799 = b;
double r35392800 = r35392798 * r35392799;
double r35392801 = r35392797 + r35392800;
double r35392802 = r35392785 * r35392794;
double r35392803 = i;
double r35392804 = r35392802 * r35392803;
double r35392805 = r35392801 - r35392804;
double r35392806 = -inf.0;
bool r35392807 = r35392805 <= r35392806;
double r35392808 = r35392784 * r35392785;
double r35392809 = r35392788 * r35392786;
double r35392810 = r35392808 * r35392809;
double r35392811 = r35392810 * r35392790;
double r35392812 = r35392785 * r35392803;
double r35392813 = fma(r35392784, r35392793, r35392812);
double r35392814 = 27.0;
double r35392815 = k;
double r35392816 = j;
double r35392817 = r35392815 * r35392816;
double r35392818 = r35392814 * r35392817;
double r35392819 = fma(r35392794, r35392813, r35392818);
double r35392820 = r35392811 - r35392819;
double r35392821 = fma(r35392799, r35392798, r35392820);
double r35392822 = 2.403209667818115e+294;
bool r35392823 = r35392805 <= r35392822;
double r35392824 = r35392814 * r35392815;
double r35392825 = r35392816 * r35392824;
double r35392826 = r35392805 - r35392825;
double r35392827 = r35392790 * r35392785;
double r35392828 = r35392827 * r35392784;
double r35392829 = r35392788 * r35392828;
double r35392830 = r35392829 * r35392786;
double r35392831 = r35392830 - r35392796;
double r35392832 = r35392800 + r35392831;
double r35392833 = r35392832 - r35392804;
double r35392834 = r35392818 * r35392818;
double r35392835 = r35392814 * r35392834;
double r35392836 = r35392817 * r35392835;
double r35392837 = cbrt(r35392836);
double r35392838 = r35392833 - r35392837;
double r35392839 = r35392823 ? r35392826 : r35392838;
double r35392840 = r35392807 ? r35392821 : r35392839;
return r35392840;
}




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.4 |
|---|---|
| Target | 1.4 |
| Herbie | 2.1 |
if (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < -inf.0Initial program 60.5
Simplified12.8
if -inf.0 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < 2.403209667818115e+294Initial program 0.3
rmApplied associate-*l*0.3
if 2.403209667818115e+294 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) Initial program 42.0
Taylor expanded around inf 27.1
rmApplied associate-*r*27.2
rmApplied associate-*r*10.2
rmApplied add-cbrt-cube21.3
Applied add-cbrt-cube21.3
Applied add-cbrt-cube34.1
Applied cbrt-unprod34.1
Applied cbrt-unprod34.5
Simplified21.9
Final simplification2.1
herbie shell --seed 2019163 +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)))