\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}\;b \le -4.400785168655679605773741836481995189038 \cdot 10^{-141} \lor \neg \left(b \le -5.616902006401816366798818804296717843031 \cdot 10^{-291}\right):\\
\;\;\;\;\left(\left(\left(\sqrt[3]{x \cdot \mathsf{fma}\left(y, z, -a \cdot t\right)} \cdot \sqrt[3]{x \cdot \mathsf{fma}\left(y, z, -a \cdot t\right)}\right) \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{\mathsf{fma}\left(y, z, -a \cdot t\right)}\right) + x \cdot \mathsf{fma}\left(-a, t, a \cdot t\right)\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(x \cdot \mathsf{fma}\left(y, z, -a \cdot t\right) + x \cdot \mathsf{fma}\left(-a, t, a \cdot t\right)\right) - 0\right) + j \cdot \left(c \cdot t - i \cdot y\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r702941 = x;
double r702942 = y;
double r702943 = z;
double r702944 = r702942 * r702943;
double r702945 = t;
double r702946 = a;
double r702947 = r702945 * r702946;
double r702948 = r702944 - r702947;
double r702949 = r702941 * r702948;
double r702950 = b;
double r702951 = c;
double r702952 = r702951 * r702943;
double r702953 = i;
double r702954 = r702953 * r702946;
double r702955 = r702952 - r702954;
double r702956 = r702950 * r702955;
double r702957 = r702949 - r702956;
double r702958 = j;
double r702959 = r702951 * r702945;
double r702960 = r702953 * r702942;
double r702961 = r702959 - r702960;
double r702962 = r702958 * r702961;
double r702963 = r702957 + r702962;
return r702963;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r702964 = b;
double r702965 = -4.4007851686556796e-141;
bool r702966 = r702964 <= r702965;
double r702967 = -5.6169020064018164e-291;
bool r702968 = r702964 <= r702967;
double r702969 = !r702968;
bool r702970 = r702966 || r702969;
double r702971 = x;
double r702972 = y;
double r702973 = z;
double r702974 = a;
double r702975 = t;
double r702976 = r702974 * r702975;
double r702977 = -r702976;
double r702978 = fma(r702972, r702973, r702977);
double r702979 = r702971 * r702978;
double r702980 = cbrt(r702979);
double r702981 = r702980 * r702980;
double r702982 = cbrt(r702971);
double r702983 = cbrt(r702978);
double r702984 = r702982 * r702983;
double r702985 = r702981 * r702984;
double r702986 = -r702974;
double r702987 = fma(r702986, r702975, r702976);
double r702988 = r702971 * r702987;
double r702989 = r702985 + r702988;
double r702990 = c;
double r702991 = r702990 * r702973;
double r702992 = i;
double r702993 = r702992 * r702974;
double r702994 = r702991 - r702993;
double r702995 = r702964 * r702994;
double r702996 = r702989 - r702995;
double r702997 = j;
double r702998 = r702990 * r702975;
double r702999 = r702992 * r702972;
double r703000 = r702998 - r702999;
double r703001 = r702997 * r703000;
double r703002 = r702996 + r703001;
double r703003 = r702979 + r702988;
double r703004 = 0.0;
double r703005 = r703003 - r703004;
double r703006 = r703005 + r703001;
double r703007 = r702970 ? r703002 : r703006;
return r703007;
}




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.6 |
|---|---|
| Target | 16.5 |
| Herbie | 13.1 |
if b < -4.4007851686556796e-141 or -5.6169020064018164e-291 < b Initial program 11.6
rmApplied prod-diff11.6
Applied distribute-lft-in11.6
rmApplied add-cube-cbrt11.8
rmApplied cbrt-prod11.8
if -4.4007851686556796e-141 < b < -5.6169020064018164e-291Initial program 18.3
rmApplied prod-diff18.3
Applied distribute-lft-in18.3
Taylor expanded around 0 20.1
Final simplification13.1
herbie shell --seed 2019362 +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)))))