\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}\;\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) = -\infty \lor \neg \left(\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) \le 4.999599852208662350331065524329530205172 \cdot 10^{305}\right):\\
\;\;\;\;\left(t \cdot \left(i \cdot b\right) + a \cdot \left(j \cdot c\right)\right) - i \cdot \left(j \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(b \cdot \left(c \cdot z\right) + b \cdot \left(-t \cdot i\right)\right)\right) + \left(\sqrt[3]{j} \cdot \sqrt[3]{j}\right) \cdot \left(\sqrt[3]{j} \cdot \left(c \cdot a - y \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 r875513 = x;
double r875514 = y;
double r875515 = z;
double r875516 = r875514 * r875515;
double r875517 = t;
double r875518 = a;
double r875519 = r875517 * r875518;
double r875520 = r875516 - r875519;
double r875521 = r875513 * r875520;
double r875522 = b;
double r875523 = c;
double r875524 = r875523 * r875515;
double r875525 = i;
double r875526 = r875517 * r875525;
double r875527 = r875524 - r875526;
double r875528 = r875522 * r875527;
double r875529 = r875521 - r875528;
double r875530 = j;
double r875531 = r875523 * r875518;
double r875532 = r875514 * r875525;
double r875533 = r875531 - r875532;
double r875534 = r875530 * r875533;
double r875535 = r875529 + r875534;
return r875535;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r875536 = x;
double r875537 = y;
double r875538 = z;
double r875539 = r875537 * r875538;
double r875540 = t;
double r875541 = a;
double r875542 = r875540 * r875541;
double r875543 = r875539 - r875542;
double r875544 = r875536 * r875543;
double r875545 = b;
double r875546 = c;
double r875547 = r875546 * r875538;
double r875548 = i;
double r875549 = r875540 * r875548;
double r875550 = r875547 - r875549;
double r875551 = r875545 * r875550;
double r875552 = r875544 - r875551;
double r875553 = j;
double r875554 = r875546 * r875541;
double r875555 = r875537 * r875548;
double r875556 = r875554 - r875555;
double r875557 = r875553 * r875556;
double r875558 = r875552 + r875557;
double r875559 = -inf.0;
bool r875560 = r875558 <= r875559;
double r875561 = 4.999599852208662e+305;
bool r875562 = r875558 <= r875561;
double r875563 = !r875562;
bool r875564 = r875560 || r875563;
double r875565 = r875548 * r875545;
double r875566 = r875540 * r875565;
double r875567 = r875553 * r875546;
double r875568 = r875541 * r875567;
double r875569 = r875566 + r875568;
double r875570 = r875553 * r875537;
double r875571 = r875548 * r875570;
double r875572 = r875569 - r875571;
double r875573 = r875545 * r875547;
double r875574 = -r875549;
double r875575 = r875545 * r875574;
double r875576 = r875573 + r875575;
double r875577 = r875544 - r875576;
double r875578 = cbrt(r875553);
double r875579 = r875578 * r875578;
double r875580 = r875578 * r875556;
double r875581 = r875579 * r875580;
double r875582 = r875577 + r875581;
double r875583 = r875564 ? r875572 : r875582;
return r875583;
}




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 | 11.6 |
|---|---|
| Target | 19.6 |
| Herbie | 7.4 |
if (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* t i)))) (* j (- (* c a) (* y i)))) < -inf.0 or 4.999599852208662e+305 < (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* t i)))) (* j (- (* c a) (* y i)))) Initial program 62.6
Taylor expanded around inf 37.0
if -inf.0 < (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* t i)))) (* j (- (* c a) (* y i)))) < 4.999599852208662e+305Initial program 0.7
rmApplied sub-neg0.7
Applied distribute-lft-in0.7
rmApplied add-cube-cbrt1.1
Applied associate-*l*1.1
Final simplification7.4
herbie shell --seed 2020002
(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)))))