\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}\;j \le -6.4495839482546187 \cdot 10^{-305} \lor \neg \left(j \le 4.19755113566794436 \cdot 10^{-217}\right):\\
\;\;\;\;\mathsf{fma}\left(c \cdot a - y \cdot i, j, \left(x \cdot \mathsf{fma}\left(y, z, -a \cdot t\right) + x \cdot \mathsf{fma}\left(-a, t, a \cdot t\right)\right) - \left(\left(\sqrt[3]{b} \cdot \sqrt[3]{b}\right) \cdot \left(\sqrt[3]{b} \cdot \left(c \cdot z\right)\right) + b \cdot \left(-t \cdot i\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(t, i \cdot b, -\mathsf{fma}\left(z, b \cdot c, t \cdot \left(x \cdot a\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 r953019 = x;
double r953020 = y;
double r953021 = z;
double r953022 = r953020 * r953021;
double r953023 = t;
double r953024 = a;
double r953025 = r953023 * r953024;
double r953026 = r953022 - r953025;
double r953027 = r953019 * r953026;
double r953028 = b;
double r953029 = c;
double r953030 = r953029 * r953021;
double r953031 = i;
double r953032 = r953023 * r953031;
double r953033 = r953030 - r953032;
double r953034 = r953028 * r953033;
double r953035 = r953027 - r953034;
double r953036 = j;
double r953037 = r953029 * r953024;
double r953038 = r953020 * r953031;
double r953039 = r953037 - r953038;
double r953040 = r953036 * r953039;
double r953041 = r953035 + r953040;
return r953041;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r953042 = j;
double r953043 = -6.449583948254619e-305;
bool r953044 = r953042 <= r953043;
double r953045 = 4.197551135667944e-217;
bool r953046 = r953042 <= r953045;
double r953047 = !r953046;
bool r953048 = r953044 || r953047;
double r953049 = c;
double r953050 = a;
double r953051 = r953049 * r953050;
double r953052 = y;
double r953053 = i;
double r953054 = r953052 * r953053;
double r953055 = r953051 - r953054;
double r953056 = x;
double r953057 = z;
double r953058 = t;
double r953059 = r953050 * r953058;
double r953060 = -r953059;
double r953061 = fma(r953052, r953057, r953060);
double r953062 = r953056 * r953061;
double r953063 = -r953050;
double r953064 = fma(r953063, r953058, r953059);
double r953065 = r953056 * r953064;
double r953066 = r953062 + r953065;
double r953067 = b;
double r953068 = cbrt(r953067);
double r953069 = r953068 * r953068;
double r953070 = r953049 * r953057;
double r953071 = r953068 * r953070;
double r953072 = r953069 * r953071;
double r953073 = r953058 * r953053;
double r953074 = -r953073;
double r953075 = r953067 * r953074;
double r953076 = r953072 + r953075;
double r953077 = r953066 - r953076;
double r953078 = fma(r953055, r953042, r953077);
double r953079 = r953053 * r953067;
double r953080 = r953067 * r953049;
double r953081 = r953056 * r953050;
double r953082 = r953058 * r953081;
double r953083 = fma(r953057, r953080, r953082);
double r953084 = -r953083;
double r953085 = fma(r953058, r953079, r953084);
double r953086 = r953048 ? r953078 : r953085;
return r953086;
}




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 | 11.9 |
|---|---|
| Target | 19.9 |
| Herbie | 13.1 |
if j < -6.449583948254619e-305 or 4.197551135667944e-217 < j Initial program 11.2
Simplified11.2
rmApplied prod-diff11.2
Applied distribute-lft-in11.2
rmApplied sub-neg11.2
Applied distribute-lft-in11.2
rmApplied add-cube-cbrt11.4
Applied associate-*l*11.4
if -6.449583948254619e-305 < j < 4.197551135667944e-217Initial program 17.8
Simplified17.8
Taylor expanded around inf 28.7
Simplified28.7
Final simplification13.1
herbie shell --seed 2020062 +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)))))