\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)
\begin{array}{l}
\mathbf{if}\;x \le -5.39848533641985994 \cdot 10^{-203}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot a - y \cdot i, j, \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(\sqrt[3]{x} \cdot \left(y \cdot z - t \cdot a\right)\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right)\\
\mathbf{elif}\;x \le 6.4754868919188863 \cdot 10^{-162}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot a - y \cdot i, j, 0 - b \cdot \left(c \cdot z - t \cdot i\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot a - y \cdot i, j, \sqrt{x} \cdot \left(\sqrt{x} \cdot \left(y \cdot z - t \cdot a\right)\right) - b \cdot \left(c \cdot z - t \cdot i\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 r925999 = x;
double r926000 = y;
double r926001 = z;
double r926002 = r926000 * r926001;
double r926003 = t;
double r926004 = a;
double r926005 = r926003 * r926004;
double r926006 = r926002 - r926005;
double r926007 = r925999 * r926006;
double r926008 = b;
double r926009 = c;
double r926010 = r926009 * r926001;
double r926011 = i;
double r926012 = r926003 * r926011;
double r926013 = r926010 - r926012;
double r926014 = r926008 * r926013;
double r926015 = r926007 - r926014;
double r926016 = j;
double r926017 = r926009 * r926004;
double r926018 = r926000 * r926011;
double r926019 = r926017 - r926018;
double r926020 = r926016 * r926019;
double r926021 = r926015 + r926020;
return r926021;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r926022 = x;
double r926023 = -5.39848533641986e-203;
bool r926024 = r926022 <= r926023;
double r926025 = c;
double r926026 = a;
double r926027 = r926025 * r926026;
double r926028 = y;
double r926029 = i;
double r926030 = r926028 * r926029;
double r926031 = r926027 - r926030;
double r926032 = j;
double r926033 = cbrt(r926022);
double r926034 = r926033 * r926033;
double r926035 = z;
double r926036 = r926028 * r926035;
double r926037 = t;
double r926038 = r926037 * r926026;
double r926039 = r926036 - r926038;
double r926040 = r926033 * r926039;
double r926041 = r926034 * r926040;
double r926042 = b;
double r926043 = r926025 * r926035;
double r926044 = r926037 * r926029;
double r926045 = r926043 - r926044;
double r926046 = r926042 * r926045;
double r926047 = r926041 - r926046;
double r926048 = fma(r926031, r926032, r926047);
double r926049 = 6.475486891918886e-162;
bool r926050 = r926022 <= r926049;
double r926051 = 0.0;
double r926052 = r926051 - r926046;
double r926053 = fma(r926031, r926032, r926052);
double r926054 = sqrt(r926022);
double r926055 = r926054 * r926039;
double r926056 = r926054 * r926055;
double r926057 = r926056 - r926046;
double r926058 = fma(r926031, r926032, r926057);
double r926059 = r926050 ? r926053 : r926058;
double r926060 = r926024 ? r926048 : r926059;
return r926060;
}




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.2 |
|---|---|
| Target | 20.1 |
| Herbie | 12.5 |
if x < -5.39848533641986e-203Initial program 10.1
Simplified10.1
rmApplied add-cube-cbrt10.5
Applied associate-*l*10.5
if -5.39848533641986e-203 < x < 6.475486891918886e-162Initial program 17.6
Simplified17.6
Taylor expanded around 0 18.0
if 6.475486891918886e-162 < x Initial program 10.6
Simplified10.6
rmApplied add-sqr-sqrt10.7
Applied associate-*l*10.7
Final simplification12.5
herbie shell --seed 2020083 +o rules:numerics
(FPCore (x y z t a b c i j)
:name "Data.Colour.Matrix:determinant from colour-2.3.3, A"
:precision binary64
:herbie-target
(if (< x -1.469694296777705e-64) (+ (- (* x (- (* y z) (* t a))) (/ (* b (- (pow (* c z) 2) (pow (* t i) 2))) (+ (* c z) (* t i)))) (* j (- (* c a) (* y i)))) (if (< x 3.2113527362226803e-147) (- (* (- (* b i) (* x a)) t) (- (* z (* c b)) (* j (- (* c a) (* y i))))) (+ (- (* x (- (* y z) (* t a))) (/ (* b (- (pow (* c z) 2) (pow (* t i) 2))) (+ (* c z) (* t i)))) (* j (- (* c a) (* y i))))))
(+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* t i)))) (* j (- (* c a) (* y i)))))