\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}\;b \le -2.557156540206759491060099266665758475148 \cdot 10^{77} \lor \neg \left(b \le 6.288387807050133384086894370081620679201 \cdot 10^{-14}\right):\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + \left(\sqrt[3]{j \cdot \left(c \cdot a - y \cdot i\right)} \cdot \sqrt[3]{j \cdot \left(c \cdot a - y \cdot i\right)}\right) \cdot \sqrt[3]{j \cdot \left(c \cdot a - y \cdot i\right)}\\
\mathbf{else}:\\
\;\;\;\;j \cdot \left(c \cdot a - y \cdot i\right) + \left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + \left(-t \cdot \left(i \cdot b\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 r547020 = x;
double r547021 = y;
double r547022 = z;
double r547023 = r547021 * r547022;
double r547024 = t;
double r547025 = a;
double r547026 = r547024 * r547025;
double r547027 = r547023 - r547026;
double r547028 = r547020 * r547027;
double r547029 = b;
double r547030 = c;
double r547031 = r547030 * r547022;
double r547032 = i;
double r547033 = r547024 * r547032;
double r547034 = r547031 - r547033;
double r547035 = r547029 * r547034;
double r547036 = r547028 - r547035;
double r547037 = j;
double r547038 = r547030 * r547025;
double r547039 = r547021 * r547032;
double r547040 = r547038 - r547039;
double r547041 = r547037 * r547040;
double r547042 = r547036 + r547041;
return r547042;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r547043 = b;
double r547044 = -2.5571565402067595e+77;
bool r547045 = r547043 <= r547044;
double r547046 = 6.288387807050133e-14;
bool r547047 = r547043 <= r547046;
double r547048 = !r547047;
bool r547049 = r547045 || r547048;
double r547050 = x;
double r547051 = y;
double r547052 = z;
double r547053 = r547051 * r547052;
double r547054 = t;
double r547055 = a;
double r547056 = r547054 * r547055;
double r547057 = r547053 - r547056;
double r547058 = r547050 * r547057;
double r547059 = c;
double r547060 = r547059 * r547052;
double r547061 = i;
double r547062 = r547054 * r547061;
double r547063 = r547060 - r547062;
double r547064 = r547043 * r547063;
double r547065 = r547058 - r547064;
double r547066 = j;
double r547067 = r547059 * r547055;
double r547068 = r547051 * r547061;
double r547069 = r547067 - r547068;
double r547070 = r547066 * r547069;
double r547071 = cbrt(r547070);
double r547072 = r547071 * r547071;
double r547073 = r547072 * r547071;
double r547074 = r547065 + r547073;
double r547075 = r547043 * r547059;
double r547076 = r547052 * r547075;
double r547077 = r547061 * r547043;
double r547078 = r547054 * r547077;
double r547079 = -r547078;
double r547080 = r547076 + r547079;
double r547081 = r547058 - r547080;
double r547082 = r547070 + r547081;
double r547083 = r547049 ? r547074 : r547082;
return r547083;
}




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
Results
| Original | 12.5 |
|---|---|
| Target | 20.4 |
| Herbie | 9.2 |
if b < -2.5571565402067595e+77 or 6.288387807050133e-14 < b Initial program 7.4
rmApplied add-cube-cbrt7.6
if -2.5571565402067595e+77 < b < 6.288387807050133e-14Initial program 15.3
rmApplied sub-neg15.3
Applied distribute-lft-in15.3
Simplified12.8
rmApplied pow112.8
Applied pow112.8
Applied pow-prod-down12.8
Simplified10.1
Final simplification9.2
herbie shell --seed 2019323
(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)))))