\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 -1.769364613621733552383620262384135612998 \cdot 10^{-286}:\\
\;\;\;\;\left(\left(y \cdot z - t \cdot a\right) \cdot x - \left(\sqrt[3]{b} \cdot \left(c \cdot z - i \cdot t\right)\right) \cdot \left(\sqrt[3]{b} \cdot \sqrt[3]{b}\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\mathbf{elif}\;j \le 4.199087590050386664363720491477147491239 \cdot 10^{-242}:\\
\;\;\;\;\left(y \cdot z - t \cdot a\right) \cdot x - b \cdot \left(c \cdot z - i \cdot t\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(y \cdot z - t \cdot a\right) \cdot x - b \cdot \left(c \cdot z - i \cdot t\right)\right) + \left(\sqrt{j} \cdot \left(c \cdot a - y \cdot i\right)\right) \cdot \sqrt{j}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r37675382 = x;
double r37675383 = y;
double r37675384 = z;
double r37675385 = r37675383 * r37675384;
double r37675386 = t;
double r37675387 = a;
double r37675388 = r37675386 * r37675387;
double r37675389 = r37675385 - r37675388;
double r37675390 = r37675382 * r37675389;
double r37675391 = b;
double r37675392 = c;
double r37675393 = r37675392 * r37675384;
double r37675394 = i;
double r37675395 = r37675386 * r37675394;
double r37675396 = r37675393 - r37675395;
double r37675397 = r37675391 * r37675396;
double r37675398 = r37675390 - r37675397;
double r37675399 = j;
double r37675400 = r37675392 * r37675387;
double r37675401 = r37675383 * r37675394;
double r37675402 = r37675400 - r37675401;
double r37675403 = r37675399 * r37675402;
double r37675404 = r37675398 + r37675403;
return r37675404;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r37675405 = j;
double r37675406 = -1.7693646136217336e-286;
bool r37675407 = r37675405 <= r37675406;
double r37675408 = y;
double r37675409 = z;
double r37675410 = r37675408 * r37675409;
double r37675411 = t;
double r37675412 = a;
double r37675413 = r37675411 * r37675412;
double r37675414 = r37675410 - r37675413;
double r37675415 = x;
double r37675416 = r37675414 * r37675415;
double r37675417 = b;
double r37675418 = cbrt(r37675417);
double r37675419 = c;
double r37675420 = r37675419 * r37675409;
double r37675421 = i;
double r37675422 = r37675421 * r37675411;
double r37675423 = r37675420 - r37675422;
double r37675424 = r37675418 * r37675423;
double r37675425 = r37675418 * r37675418;
double r37675426 = r37675424 * r37675425;
double r37675427 = r37675416 - r37675426;
double r37675428 = r37675419 * r37675412;
double r37675429 = r37675408 * r37675421;
double r37675430 = r37675428 - r37675429;
double r37675431 = r37675405 * r37675430;
double r37675432 = r37675427 + r37675431;
double r37675433 = 4.199087590050387e-242;
bool r37675434 = r37675405 <= r37675433;
double r37675435 = r37675417 * r37675423;
double r37675436 = r37675416 - r37675435;
double r37675437 = sqrt(r37675405);
double r37675438 = r37675437 * r37675430;
double r37675439 = r37675438 * r37675437;
double r37675440 = r37675436 + r37675439;
double r37675441 = r37675434 ? r37675436 : r37675440;
double r37675442 = r37675407 ? r37675432 : r37675441;
return r37675442;
}




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.3 |
|---|---|
| Target | 20.1 |
| Herbie | 12.3 |
if j < -1.7693646136217336e-286Initial program 12.4
rmApplied add-cube-cbrt12.7
Applied associate-*l*12.7
if -1.7693646136217336e-286 < j < 4.199087590050387e-242Initial program 18.6
Taylor expanded around 0 16.9
if 4.199087590050387e-242 < j Initial program 10.9
rmApplied add-sqr-sqrt11.0
Applied associate-*l*11.0
Final simplification12.3
herbie shell --seed 2019170
(FPCore (x y z t a b c i j)
:name "Data.Colour.Matrix:determinant from colour-2.3.3, A"
:herbie-target
(if (< x -1.469694296777705e-64) (+ (- (* x (- (* y z) (* t a))) (/ (* b (- (pow (* c z) 2.0) (pow (* t i) 2.0))) (+ (* 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.0) (pow (* t i) 2.0))) (+ (* c z) (* t i)))) (* j (- (* c a) (* y i))))))
(+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* t i)))) (* j (- (* c a) (* y i)))))