\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)
\begin{array}{l}
\mathbf{if}\;a \le 5.1580528935561765 \cdot 10^{-13}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, x \cdot \left(y \cdot z - t \cdot a\right) - \left(b \cdot \left(\sqrt[3]{c \cdot z - i \cdot a} \cdot \sqrt[3]{c \cdot z - i \cdot a}\right)\right) \cdot \sqrt[3]{c \cdot z - i \cdot a}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, \mathsf{fma}\left(a, i \cdot b, -\mathsf{fma}\left(z, b \cdot c, a \cdot \left(x \cdot t\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 r548744 = x;
double r548745 = y;
double r548746 = z;
double r548747 = r548745 * r548746;
double r548748 = t;
double r548749 = a;
double r548750 = r548748 * r548749;
double r548751 = r548747 - r548750;
double r548752 = r548744 * r548751;
double r548753 = b;
double r548754 = c;
double r548755 = r548754 * r548746;
double r548756 = i;
double r548757 = r548756 * r548749;
double r548758 = r548755 - r548757;
double r548759 = r548753 * r548758;
double r548760 = r548752 - r548759;
double r548761 = j;
double r548762 = r548754 * r548748;
double r548763 = r548756 * r548745;
double r548764 = r548762 - r548763;
double r548765 = r548761 * r548764;
double r548766 = r548760 + r548765;
return r548766;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r548767 = a;
double r548768 = 5.158052893556176e-13;
bool r548769 = r548767 <= r548768;
double r548770 = c;
double r548771 = t;
double r548772 = r548770 * r548771;
double r548773 = i;
double r548774 = y;
double r548775 = r548773 * r548774;
double r548776 = r548772 - r548775;
double r548777 = j;
double r548778 = x;
double r548779 = z;
double r548780 = r548774 * r548779;
double r548781 = r548771 * r548767;
double r548782 = r548780 - r548781;
double r548783 = r548778 * r548782;
double r548784 = b;
double r548785 = r548770 * r548779;
double r548786 = r548773 * r548767;
double r548787 = r548785 - r548786;
double r548788 = cbrt(r548787);
double r548789 = r548788 * r548788;
double r548790 = r548784 * r548789;
double r548791 = r548790 * r548788;
double r548792 = r548783 - r548791;
double r548793 = fma(r548776, r548777, r548792);
double r548794 = r548773 * r548784;
double r548795 = r548784 * r548770;
double r548796 = r548778 * r548771;
double r548797 = r548767 * r548796;
double r548798 = fma(r548779, r548795, r548797);
double r548799 = -r548798;
double r548800 = fma(r548767, r548794, r548799);
double r548801 = fma(r548776, r548777, r548800);
double r548802 = r548769 ? r548793 : r548801;
return r548802;
}




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
| Original | 12.4 |
|---|---|
| Target | 16.2 |
| Herbie | 11.8 |
if a < 5.158052893556176e-13Initial program 11.3
Simplified11.3
rmApplied add-cube-cbrt11.5
Applied associate-*r*11.5
if 5.158052893556176e-13 < a Initial program 16.8
Simplified16.8
Taylor expanded around inf 12.6
Simplified12.6
Final simplification11.8
herbie shell --seed 2020065 +o rules:numerics
(FPCore (x y z t a b c i j)
:name "Linear.Matrix:det33 from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< t -8.120978919195912e-33) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j))) (if (< t -4.712553818218485e-169) (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (/ (* j (- (pow (* c t) 2) (pow (* i y) 2))) (+ (* c t) (* i y)))) (if (< t -7.633533346031584e-308) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j))) (if (< t 1.0535888557455487e-139) (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (/ (* j (- (pow (* c t) 2) (pow (* i y) 2))) (+ (* c t) (* i y)))) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j)))))))
(+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (* j (- (* c t) (* i y)))))