\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}\;x \le -24461250474772234537684702372140140199940 \lor \neg \left(x \le 3.642905557903934794457798624709007377005 \cdot 10^{61}\right):\\
\;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, \left(x \cdot \left(y \cdot z\right) + \left(x \cdot \left(\sqrt[3]{-t \cdot a} \cdot \sqrt[3]{-t \cdot a}\right)\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{-t \cdot a}} \cdot \sqrt[3]{\sqrt[3]{-t \cdot a}}\right) \cdot \sqrt[3]{\sqrt[3]{-t \cdot a}}\right)\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, \left(\left(x \cdot y\right) \cdot z + x \cdot \left(-t \cdot a\right)\right) - b \cdot \left(c \cdot z - i \cdot a\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 r598818 = x;
double r598819 = y;
double r598820 = z;
double r598821 = r598819 * r598820;
double r598822 = t;
double r598823 = a;
double r598824 = r598822 * r598823;
double r598825 = r598821 - r598824;
double r598826 = r598818 * r598825;
double r598827 = b;
double r598828 = c;
double r598829 = r598828 * r598820;
double r598830 = i;
double r598831 = r598830 * r598823;
double r598832 = r598829 - r598831;
double r598833 = r598827 * r598832;
double r598834 = r598826 - r598833;
double r598835 = j;
double r598836 = r598828 * r598822;
double r598837 = r598830 * r598819;
double r598838 = r598836 - r598837;
double r598839 = r598835 * r598838;
double r598840 = r598834 + r598839;
return r598840;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r598841 = x;
double r598842 = -2.4461250474772235e+40;
bool r598843 = r598841 <= r598842;
double r598844 = 3.642905557903935e+61;
bool r598845 = r598841 <= r598844;
double r598846 = !r598845;
bool r598847 = r598843 || r598846;
double r598848 = c;
double r598849 = t;
double r598850 = r598848 * r598849;
double r598851 = i;
double r598852 = y;
double r598853 = r598851 * r598852;
double r598854 = r598850 - r598853;
double r598855 = j;
double r598856 = z;
double r598857 = r598852 * r598856;
double r598858 = r598841 * r598857;
double r598859 = a;
double r598860 = r598849 * r598859;
double r598861 = -r598860;
double r598862 = cbrt(r598861);
double r598863 = r598862 * r598862;
double r598864 = r598841 * r598863;
double r598865 = cbrt(r598862);
double r598866 = r598865 * r598865;
double r598867 = r598866 * r598865;
double r598868 = r598864 * r598867;
double r598869 = r598858 + r598868;
double r598870 = b;
double r598871 = r598848 * r598856;
double r598872 = r598851 * r598859;
double r598873 = r598871 - r598872;
double r598874 = r598870 * r598873;
double r598875 = r598869 - r598874;
double r598876 = fma(r598854, r598855, r598875);
double r598877 = r598841 * r598852;
double r598878 = r598877 * r598856;
double r598879 = r598841 * r598861;
double r598880 = r598878 + r598879;
double r598881 = r598880 - r598874;
double r598882 = fma(r598854, r598855, r598881);
double r598883 = r598847 ? r598876 : r598882;
return r598883;
}




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.3 |
|---|---|
| Target | 16.2 |
| Herbie | 11.1 |
if x < -2.4461250474772235e+40 or 3.642905557903935e+61 < x Initial program 7.8
Simplified7.8
rmApplied sub-neg7.8
Applied distribute-lft-in7.8
rmApplied add-cube-cbrt8.1
Applied associate-*r*8.1
rmApplied add-cube-cbrt8.2
if -2.4461250474772235e+40 < x < 3.642905557903935e+61Initial program 14.2
Simplified14.2
rmApplied sub-neg14.2
Applied distribute-lft-in14.2
rmApplied associate-*r*12.3
Final simplification11.1
herbie shell --seed 2019353 +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)))))