\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 -2.566091969541493352315508862498706559477 \cdot 10^{45}:\\
\;\;\;\;\mathsf{fma}\left(a \cdot c - i \cdot y, j, \mathsf{fma}\left(b, \mathsf{fma}\left(i, t, -c \cdot z\right), \left(\mathsf{fma}\left(t, -a, z \cdot y\right) \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)\right) \cdot \sqrt[3]{x}\right)\right)\\
\mathbf{elif}\;j \le -4.141239147151520834080552317911534287688 \cdot 10^{-69}:\\
\;\;\;\;\mathsf{fma}\left(a \cdot c - i \cdot y, j, \left(y \cdot x - c \cdot b\right) \cdot z - a \cdot \left(x \cdot t\right)\right)\\
\mathbf{elif}\;j \le -1.486543621713845379519112426681396033417 \cdot 10^{-153}:\\
\;\;\;\;\mathsf{fma}\left(a \cdot c - i \cdot y, j, \mathsf{fma}\left(b, \mathsf{fma}\left(i, t, -c \cdot z\right), \left(\mathsf{fma}\left(t, -a, z \cdot y\right) \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)\right) \cdot \sqrt[3]{x}\right)\right)\\
\mathbf{elif}\;j \le 9.767323515894152770768312545304689555249 \cdot 10^{-303}:\\
\;\;\;\;\left(y \cdot x - c \cdot b\right) \cdot z - a \cdot \left(x \cdot t\right)\\
\mathbf{elif}\;j \le 6.437379880768459580308314932846778822484 \cdot 10^{-288}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(-y, i, a \cdot c\right), j, \mathsf{fma}\left(b, \mathsf{fma}\left(-z, c, t \cdot i\right), \mathsf{fma}\left(z, y, a \cdot \left(-t\right)\right) \cdot x\right)\right)} \cdot \sqrt{\mathsf{fma}\left(\mathsf{fma}\left(-y, i, a \cdot c\right), j, \mathsf{fma}\left(b, \mathsf{fma}\left(-z, c, t \cdot i\right), \mathsf{fma}\left(z, y, a \cdot \left(-t\right)\right) \cdot x\right)\right)}\\
\mathbf{elif}\;j \le 5.545643470019667308039557439936978564639 \cdot 10^{-170}:\\
\;\;\;\;\mathsf{fma}\left(0, j, \mathsf{fma}\left(b, \mathsf{fma}\left(i, t, -c \cdot z\right), x \cdot \mathsf{fma}\left(-a, t, z \cdot y\right)\right)\right)\\
\mathbf{elif}\;j \le 90120617599903775658324938245275648:\\
\;\;\;\;\mathsf{fma}\left(a \cdot c - i \cdot y, j, \mathsf{fma}\left(b, \mathsf{fma}\left(i, t, -c \cdot z\right), \left(\mathsf{fma}\left(t, -a, z \cdot y\right) \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)\right) \cdot \sqrt[3]{x}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\sqrt[3]{\mathsf{fma}\left(c, a, i \cdot \left(-y\right)\right)} \cdot \left(\sqrt[3]{\mathsf{fma}\left(c, a, i \cdot \left(-y\right)\right)} \cdot \sqrt[3]{\mathsf{fma}\left(c, a, i \cdot \left(-y\right)\right)}\right), j, \mathsf{fma}\left(z, \mathsf{fma}\left(x, y, \left(-c\right) \cdot b\right), \left(\left(-a\right) \cdot x\right) \cdot t\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 r836745 = x;
double r836746 = y;
double r836747 = z;
double r836748 = r836746 * r836747;
double r836749 = t;
double r836750 = a;
double r836751 = r836749 * r836750;
double r836752 = r836748 - r836751;
double r836753 = r836745 * r836752;
double r836754 = b;
double r836755 = c;
double r836756 = r836755 * r836747;
double r836757 = i;
double r836758 = r836749 * r836757;
double r836759 = r836756 - r836758;
double r836760 = r836754 * r836759;
double r836761 = r836753 - r836760;
double r836762 = j;
double r836763 = r836755 * r836750;
double r836764 = r836746 * r836757;
double r836765 = r836763 - r836764;
double r836766 = r836762 * r836765;
double r836767 = r836761 + r836766;
return r836767;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r836768 = j;
double r836769 = -2.5660919695414934e+45;
bool r836770 = r836768 <= r836769;
double r836771 = a;
double r836772 = c;
double r836773 = r836771 * r836772;
double r836774 = i;
double r836775 = y;
double r836776 = r836774 * r836775;
double r836777 = r836773 - r836776;
double r836778 = b;
double r836779 = t;
double r836780 = z;
double r836781 = r836772 * r836780;
double r836782 = -r836781;
double r836783 = fma(r836774, r836779, r836782);
double r836784 = -r836771;
double r836785 = r836780 * r836775;
double r836786 = fma(r836779, r836784, r836785);
double r836787 = x;
double r836788 = cbrt(r836787);
double r836789 = r836788 * r836788;
double r836790 = r836786 * r836789;
double r836791 = r836790 * r836788;
double r836792 = fma(r836778, r836783, r836791);
double r836793 = fma(r836777, r836768, r836792);
double r836794 = -4.141239147151521e-69;
bool r836795 = r836768 <= r836794;
double r836796 = r836775 * r836787;
double r836797 = r836772 * r836778;
double r836798 = r836796 - r836797;
double r836799 = r836798 * r836780;
double r836800 = r836787 * r836779;
double r836801 = r836771 * r836800;
double r836802 = r836799 - r836801;
double r836803 = fma(r836777, r836768, r836802);
double r836804 = -1.4865436217138454e-153;
bool r836805 = r836768 <= r836804;
double r836806 = 9.767323515894153e-303;
bool r836807 = r836768 <= r836806;
double r836808 = 6.4373798807684596e-288;
bool r836809 = r836768 <= r836808;
double r836810 = -r836775;
double r836811 = fma(r836810, r836774, r836773);
double r836812 = -r836780;
double r836813 = r836779 * r836774;
double r836814 = fma(r836812, r836772, r836813);
double r836815 = -r836779;
double r836816 = r836771 * r836815;
double r836817 = fma(r836780, r836775, r836816);
double r836818 = r836817 * r836787;
double r836819 = fma(r836778, r836814, r836818);
double r836820 = fma(r836811, r836768, r836819);
double r836821 = sqrt(r836820);
double r836822 = r836821 * r836821;
double r836823 = 5.545643470019667e-170;
bool r836824 = r836768 <= r836823;
double r836825 = 0.0;
double r836826 = fma(r836784, r836779, r836785);
double r836827 = r836787 * r836826;
double r836828 = fma(r836778, r836783, r836827);
double r836829 = fma(r836825, r836768, r836828);
double r836830 = 9.012061759990378e+34;
bool r836831 = r836768 <= r836830;
double r836832 = r836774 * r836810;
double r836833 = fma(r836772, r836771, r836832);
double r836834 = cbrt(r836833);
double r836835 = r836834 * r836834;
double r836836 = r836834 * r836835;
double r836837 = -r836772;
double r836838 = r836837 * r836778;
double r836839 = fma(r836787, r836775, r836838);
double r836840 = r836784 * r836787;
double r836841 = r836840 * r836779;
double r836842 = fma(r836780, r836839, r836841);
double r836843 = fma(r836836, r836768, r836842);
double r836844 = r836831 ? r836793 : r836843;
double r836845 = r836824 ? r836829 : r836844;
double r836846 = r836809 ? r836822 : r836845;
double r836847 = r836807 ? r836802 : r836846;
double r836848 = r836805 ? r836793 : r836847;
double r836849 = r836795 ? r836803 : r836848;
double r836850 = r836770 ? r836793 : r836849;
return r836850;
}




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
| Original | 12.4 |
|---|---|
| Target | 19.4 |
| Herbie | 16.1 |
if j < -2.5660919695414934e+45 or -4.141239147151521e-69 < j < -1.4865436217138454e-153 or 5.545643470019667e-170 < j < 9.012061759990378e+34Initial program 11.4
Simplified11.4
rmApplied add-cube-cbrt11.7
Applied associate-*r*11.7
Simplified11.7
if -2.5660919695414934e+45 < j < -4.141239147151521e-69Initial program 9.8
Simplified9.8
rmApplied add-cube-cbrt10.1
Applied associate-*r*10.1
Simplified10.1
Taylor expanded around inf 17.1
Simplified16.2
if -1.4865436217138454e-153 < j < 9.767323515894153e-303Initial program 16.7
Simplified16.7
rmApplied add-cube-cbrt17.1
Applied associate-*r*17.1
Simplified17.1
Taylor expanded around inf 29.8
Simplified27.4
if 9.767323515894153e-303 < j < 6.4373798807684596e-288Initial program 19.8
Simplified19.8
rmApplied add-cube-cbrt20.2
Applied associate-*r*20.2
Simplified20.2
rmApplied add-sqr-sqrt39.5
Simplified39.4
Simplified39.3
if 6.4373798807684596e-288 < j < 5.545643470019667e-170Initial program 17.3
Simplified17.3
Taylor expanded around 0 17.6
if 9.012061759990378e+34 < j Initial program 7.9
Simplified7.9
rmApplied add-cube-cbrt8.5
Simplified8.5
Simplified8.5
Taylor expanded around inf 14.6
Simplified12.8
Final simplification16.1
herbie shell --seed 2019196 +o rules:numerics
(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)))))