\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 -2.0888365422142503 \cdot 10^{-114}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(\sqrt[3]{b \cdot \left(c \cdot z - t \cdot i\right)} \cdot \sqrt[3]{b \cdot \left(c \cdot z - t \cdot i\right)}\right) \cdot \sqrt[3]{b \cdot \left(c \cdot z - t \cdot i\right)}\right) + \left(a \cdot \left(j \cdot c\right) + \left(\left(-j\right) \cdot y\right) \cdot i\right)\\
\mathbf{elif}\;x \le 2.6424334011412275 \cdot 10^{-227}:\\
\;\;\;\;\left(0 - b \cdot \left(c \cdot z - t \cdot i\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + \left(\left(a \cdot j\right) \cdot c + \left(-j\right) \cdot \left(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 r926516 = x;
double r926517 = y;
double r926518 = z;
double r926519 = r926517 * r926518;
double r926520 = t;
double r926521 = a;
double r926522 = r926520 * r926521;
double r926523 = r926519 - r926522;
double r926524 = r926516 * r926523;
double r926525 = b;
double r926526 = c;
double r926527 = r926526 * r926518;
double r926528 = i;
double r926529 = r926520 * r926528;
double r926530 = r926527 - r926529;
double r926531 = r926525 * r926530;
double r926532 = r926524 - r926531;
double r926533 = j;
double r926534 = r926526 * r926521;
double r926535 = r926517 * r926528;
double r926536 = r926534 - r926535;
double r926537 = r926533 * r926536;
double r926538 = r926532 + r926537;
return r926538;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r926539 = x;
double r926540 = -2.0888365422142503e-114;
bool r926541 = r926539 <= r926540;
double r926542 = y;
double r926543 = z;
double r926544 = r926542 * r926543;
double r926545 = t;
double r926546 = a;
double r926547 = r926545 * r926546;
double r926548 = r926544 - r926547;
double r926549 = r926539 * r926548;
double r926550 = b;
double r926551 = c;
double r926552 = r926551 * r926543;
double r926553 = i;
double r926554 = r926545 * r926553;
double r926555 = r926552 - r926554;
double r926556 = r926550 * r926555;
double r926557 = cbrt(r926556);
double r926558 = r926557 * r926557;
double r926559 = r926558 * r926557;
double r926560 = r926549 - r926559;
double r926561 = j;
double r926562 = r926561 * r926551;
double r926563 = r926546 * r926562;
double r926564 = -r926561;
double r926565 = r926564 * r926542;
double r926566 = r926565 * r926553;
double r926567 = r926563 + r926566;
double r926568 = r926560 + r926567;
double r926569 = 2.6424334011412275e-227;
bool r926570 = r926539 <= r926569;
double r926571 = 0.0;
double r926572 = r926571 - r926556;
double r926573 = r926551 * r926546;
double r926574 = r926542 * r926553;
double r926575 = r926573 - r926574;
double r926576 = r926561 * r926575;
double r926577 = r926572 + r926576;
double r926578 = r926549 - r926556;
double r926579 = r926546 * r926561;
double r926580 = r926579 * r926551;
double r926581 = r926564 * r926574;
double r926582 = r926580 + r926581;
double r926583 = r926578 + r926582;
double r926584 = r926570 ? r926577 : r926583;
double r926585 = r926541 ? r926568 : r926584;
return r926585;
}




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 | 19.9 |
| Herbie | 12.5 |
if x < -2.0888365422142503e-114Initial program 9.1
rmApplied add-cube-cbrt9.3
Applied associate-*l*9.3
rmApplied sub-neg9.3
Applied distribute-lft-in9.3
Applied distribute-lft-in9.4
Simplified9.8
Simplified9.7
rmApplied associate-*r*9.3
rmApplied add-cube-cbrt9.6
if -2.0888365422142503e-114 < x < 2.6424334011412275e-227Initial program 16.3
Taylor expanded around 0 17.0
if 2.6424334011412275e-227 < x Initial program 11.7
rmApplied add-cube-cbrt12.0
Applied associate-*l*12.0
rmApplied sub-neg12.0
Applied distribute-lft-in12.0
Applied distribute-lft-in12.0
Simplified11.8
Simplified11.7
rmApplied associate-*r*11.5
Final simplification12.5
herbie shell --seed 2020060
(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)))))