\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}\;t \le -1.7381012850626549 \cdot 10^{-82}:\\
\;\;\;\;j \cdot \left(c \cdot a - y \cdot i\right) + \left(\left(x \cdot \left(y \cdot z\right) + \left(-t \cdot \left(x \cdot a\right)\right)\right) - \left(z \cdot \left(b \cdot c\right) + \left(-t \cdot \left(i \cdot b\right)\right)\right)\right)\\
\mathbf{elif}\;t \le -5.6003152044590445 \cdot 10^{-248}:\\
\;\;\;\;\left(\left(x \cdot \left(y \cdot z\right) + \left(-a \cdot \left(x \cdot t\right)\right)\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + \left(a \cdot \left(j \cdot c\right) + j \cdot \left(-y \cdot i\right)\right)\\
\mathbf{elif}\;t \le 6.1699886005730711 \cdot 10^{-238}:\\
\;\;\;\;\left(\left(\left(x \cdot y\right) \cdot z + \left(-a \cdot \left(x \cdot t\right)\right)\right) - \left(z \cdot \left(b \cdot c\right) + \left(-\left(\sqrt[3]{t \cdot \left(i \cdot b\right)} \cdot \sqrt[3]{t \cdot \left(i \cdot b\right)}\right) \cdot \sqrt[3]{t \cdot \left(i \cdot b\right)}\right)\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\mathbf{elif}\;t \le 4.47171486710020656 \cdot 10^{-37}:\\
\;\;\;\;\left(\left(\left(x \cdot y\right) \cdot z + \left(-a \cdot \left(x \cdot t\right)\right)\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\mathbf{else}:\\
\;\;\;\;j \cdot \left(c \cdot a - y \cdot i\right) + \left(\left(x \cdot \left(y \cdot z\right) + \left(-t \cdot \left(x \cdot a\right)\right)\right) - \left(z \cdot \left(b \cdot c\right) + \left(-t \cdot \left(i \cdot b\right)\right)\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 r702065 = x;
double r702066 = y;
double r702067 = z;
double r702068 = r702066 * r702067;
double r702069 = t;
double r702070 = a;
double r702071 = r702069 * r702070;
double r702072 = r702068 - r702071;
double r702073 = r702065 * r702072;
double r702074 = b;
double r702075 = c;
double r702076 = r702075 * r702067;
double r702077 = i;
double r702078 = r702069 * r702077;
double r702079 = r702076 - r702078;
double r702080 = r702074 * r702079;
double r702081 = r702073 - r702080;
double r702082 = j;
double r702083 = r702075 * r702070;
double r702084 = r702066 * r702077;
double r702085 = r702083 - r702084;
double r702086 = r702082 * r702085;
double r702087 = r702081 + r702086;
return r702087;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r702088 = t;
double r702089 = -1.738101285062655e-82;
bool r702090 = r702088 <= r702089;
double r702091 = j;
double r702092 = c;
double r702093 = a;
double r702094 = r702092 * r702093;
double r702095 = y;
double r702096 = i;
double r702097 = r702095 * r702096;
double r702098 = r702094 - r702097;
double r702099 = r702091 * r702098;
double r702100 = x;
double r702101 = z;
double r702102 = r702095 * r702101;
double r702103 = r702100 * r702102;
double r702104 = r702100 * r702093;
double r702105 = r702088 * r702104;
double r702106 = -r702105;
double r702107 = r702103 + r702106;
double r702108 = b;
double r702109 = r702108 * r702092;
double r702110 = r702101 * r702109;
double r702111 = r702096 * r702108;
double r702112 = r702088 * r702111;
double r702113 = -r702112;
double r702114 = r702110 + r702113;
double r702115 = r702107 - r702114;
double r702116 = r702099 + r702115;
double r702117 = -5.6003152044590445e-248;
bool r702118 = r702088 <= r702117;
double r702119 = r702100 * r702088;
double r702120 = r702093 * r702119;
double r702121 = -r702120;
double r702122 = r702103 + r702121;
double r702123 = r702092 * r702101;
double r702124 = r702088 * r702096;
double r702125 = r702123 - r702124;
double r702126 = r702108 * r702125;
double r702127 = r702122 - r702126;
double r702128 = r702091 * r702092;
double r702129 = r702093 * r702128;
double r702130 = -r702097;
double r702131 = r702091 * r702130;
double r702132 = r702129 + r702131;
double r702133 = r702127 + r702132;
double r702134 = 6.169988600573071e-238;
bool r702135 = r702088 <= r702134;
double r702136 = r702100 * r702095;
double r702137 = r702136 * r702101;
double r702138 = r702137 + r702121;
double r702139 = cbrt(r702112);
double r702140 = r702139 * r702139;
double r702141 = r702140 * r702139;
double r702142 = -r702141;
double r702143 = r702110 + r702142;
double r702144 = r702138 - r702143;
double r702145 = r702144 + r702099;
double r702146 = 4.4717148671002066e-37;
bool r702147 = r702088 <= r702146;
double r702148 = r702138 - r702126;
double r702149 = r702148 + r702099;
double r702150 = r702147 ? r702149 : r702116;
double r702151 = r702135 ? r702145 : r702150;
double r702152 = r702118 ? r702133 : r702151;
double r702153 = r702090 ? r702116 : r702152;
return r702153;
}




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.8 |
|---|---|
| Target | 20.1 |
| Herbie | 10.1 |
if t < -1.738101285062655e-82 or 4.4717148671002066e-37 < t Initial program 15.5
rmApplied sub-neg15.5
Applied distribute-lft-in15.5
Simplified15.5
rmApplied sub-neg15.5
Applied distribute-lft-in15.5
Simplified15.4
Simplified12.9
rmApplied pow112.9
Applied pow112.9
Applied pow-prod-down12.9
Applied pow112.9
Applied pow-prod-down12.9
Simplified9.1
if -1.738101285062655e-82 < t < -5.6003152044590445e-248Initial program 10.4
rmApplied sub-neg10.4
Applied distribute-lft-in10.4
Simplified10.3
rmApplied sub-neg10.3
Applied distribute-lft-in10.3
Simplified9.3
if -5.6003152044590445e-248 < t < 6.169988600573071e-238Initial program 10.5
rmApplied sub-neg10.5
Applied distribute-lft-in10.5
Simplified10.6
rmApplied sub-neg10.6
Applied distribute-lft-in10.6
Simplified10.7
Simplified14.4
rmApplied associate-*r*13.9
rmApplied add-cube-cbrt13.9
if 6.169988600573071e-238 < t < 4.4717148671002066e-37Initial program 10.1
rmApplied sub-neg10.1
Applied distribute-lft-in10.1
Simplified10.1
rmApplied associate-*r*10.8
Final simplification10.1
herbie shell --seed 2019198
(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)))))