\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.67781928192120638243806754718986205394 \cdot 10^{-82}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + \left(\left(\sqrt[3]{j} \cdot \sqrt[3]{c \cdot a - y \cdot i}\right) \cdot \sqrt[3]{j \cdot \left(c \cdot a - y \cdot i\right)}\right) \cdot \left(\sqrt[3]{j} \cdot \sqrt[3]{c \cdot a - y \cdot i}\right)\\
\mathbf{elif}\;x \le 1.061840208015286687867460002036346734688 \cdot 10^{-159}:\\
\;\;\;\;\left(-b \cdot \left(c \cdot z - t \cdot i\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt{x} \cdot \left(\sqrt{x} \cdot \left(y \cdot z - t \cdot a\right)\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r55897718 = x;
double r55897719 = y;
double r55897720 = z;
double r55897721 = r55897719 * r55897720;
double r55897722 = t;
double r55897723 = a;
double r55897724 = r55897722 * r55897723;
double r55897725 = r55897721 - r55897724;
double r55897726 = r55897718 * r55897725;
double r55897727 = b;
double r55897728 = c;
double r55897729 = r55897728 * r55897720;
double r55897730 = i;
double r55897731 = r55897722 * r55897730;
double r55897732 = r55897729 - r55897731;
double r55897733 = r55897727 * r55897732;
double r55897734 = r55897726 - r55897733;
double r55897735 = j;
double r55897736 = r55897728 * r55897723;
double r55897737 = r55897719 * r55897730;
double r55897738 = r55897736 - r55897737;
double r55897739 = r55897735 * r55897738;
double r55897740 = r55897734 + r55897739;
return r55897740;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r55897741 = x;
double r55897742 = -2.6778192819212064e-82;
bool r55897743 = r55897741 <= r55897742;
double r55897744 = y;
double r55897745 = z;
double r55897746 = r55897744 * r55897745;
double r55897747 = t;
double r55897748 = a;
double r55897749 = r55897747 * r55897748;
double r55897750 = r55897746 - r55897749;
double r55897751 = r55897741 * r55897750;
double r55897752 = b;
double r55897753 = c;
double r55897754 = r55897753 * r55897745;
double r55897755 = i;
double r55897756 = r55897747 * r55897755;
double r55897757 = r55897754 - r55897756;
double r55897758 = r55897752 * r55897757;
double r55897759 = r55897751 - r55897758;
double r55897760 = j;
double r55897761 = cbrt(r55897760);
double r55897762 = r55897753 * r55897748;
double r55897763 = r55897744 * r55897755;
double r55897764 = r55897762 - r55897763;
double r55897765 = cbrt(r55897764);
double r55897766 = r55897761 * r55897765;
double r55897767 = r55897760 * r55897764;
double r55897768 = cbrt(r55897767);
double r55897769 = r55897766 * r55897768;
double r55897770 = r55897769 * r55897766;
double r55897771 = r55897759 + r55897770;
double r55897772 = 1.0618402080152867e-159;
bool r55897773 = r55897741 <= r55897772;
double r55897774 = -r55897758;
double r55897775 = r55897774 + r55897767;
double r55897776 = sqrt(r55897741);
double r55897777 = r55897776 * r55897750;
double r55897778 = r55897776 * r55897777;
double r55897779 = r55897778 - r55897758;
double r55897780 = r55897779 + r55897767;
double r55897781 = r55897773 ? r55897775 : r55897780;
double r55897782 = r55897743 ? r55897771 : r55897781;
return r55897782;
}




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.2 |
| Herbie | 12.9 |
if x < -2.6778192819212064e-82Initial program 8.5
rmApplied add-cube-cbrt8.8
rmApplied cbrt-prod8.7
rmApplied cbrt-prod8.8
if -2.6778192819212064e-82 < x < 1.0618402080152867e-159Initial program 17.2
Taylor expanded around 0 18.6
if 1.0618402080152867e-159 < x Initial program 9.9
rmApplied add-sqr-sqrt10.0
Applied associate-*l*10.0
Final simplification12.9
herbie shell --seed 2019174
(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)))))