\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}\;z \le -9.965934507395226057401973153405420066828 \cdot 10^{65}:\\
\;\;\;\;\left(\left(x \cdot \left(y \cdot z\right) + \left(-a \cdot \left(x \cdot t\right)\right)\right) - \left(z \cdot \left(b \cdot c\right) + \left(-t \cdot \left(i \cdot b\right)\right)\right)\right) + \left(a \cdot \left(j \cdot c\right) + \left(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{elif}\;z \le -4.689883489295011790407732434019287505254 \cdot 10^{-216}:\\
\;\;\;\;\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) + \left(a \cdot \left(j \cdot c\right) + \left(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{elif}\;z \le -1.864721872398415194168523407765985541812 \cdot 10^{-272}:\\
\;\;\;\;\left(t \cdot \left(i \cdot b\right) - \left(z \cdot \left(b \cdot c\right) + a \cdot \left(x \cdot t\right)\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\mathbf{elif}\;z \le -6.628575237567785096221400260672621839607 \cdot 10^{-290}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\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)\\
\mathbf{elif}\;z \le 5.886583142604684229808502775776833451681 \cdot 10^{-202}:\\
\;\;\;\;\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(\left(a \cdot j\right) \cdot c + \left(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{elif}\;z \le 79.85626140011545714969543041661381721497:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\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)\\
\mathbf{else}:\\
\;\;\;\;\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) + \left(a \cdot \left(j \cdot c\right) + \left(-i \cdot \left(j \cdot y\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 r571072 = x;
double r571073 = y;
double r571074 = z;
double r571075 = r571073 * r571074;
double r571076 = t;
double r571077 = a;
double r571078 = r571076 * r571077;
double r571079 = r571075 - r571078;
double r571080 = r571072 * r571079;
double r571081 = b;
double r571082 = c;
double r571083 = r571082 * r571074;
double r571084 = i;
double r571085 = r571076 * r571084;
double r571086 = r571083 - r571085;
double r571087 = r571081 * r571086;
double r571088 = r571080 - r571087;
double r571089 = j;
double r571090 = r571082 * r571077;
double r571091 = r571073 * r571084;
double r571092 = r571090 - r571091;
double r571093 = r571089 * r571092;
double r571094 = r571088 + r571093;
return r571094;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r571095 = z;
double r571096 = -9.965934507395226e+65;
bool r571097 = r571095 <= r571096;
double r571098 = x;
double r571099 = y;
double r571100 = r571099 * r571095;
double r571101 = r571098 * r571100;
double r571102 = a;
double r571103 = t;
double r571104 = r571098 * r571103;
double r571105 = r571102 * r571104;
double r571106 = -r571105;
double r571107 = r571101 + r571106;
double r571108 = b;
double r571109 = c;
double r571110 = r571108 * r571109;
double r571111 = r571095 * r571110;
double r571112 = i;
double r571113 = r571112 * r571108;
double r571114 = r571103 * r571113;
double r571115 = -r571114;
double r571116 = r571111 + r571115;
double r571117 = r571107 - r571116;
double r571118 = j;
double r571119 = r571118 * r571109;
double r571120 = r571102 * r571119;
double r571121 = r571118 * r571099;
double r571122 = r571112 * r571121;
double r571123 = -r571122;
double r571124 = r571120 + r571123;
double r571125 = r571117 + r571124;
double r571126 = -4.689883489295012e-216;
bool r571127 = r571095 <= r571126;
double r571128 = r571098 * r571099;
double r571129 = r571128 * r571095;
double r571130 = r571129 + r571106;
double r571131 = r571109 * r571095;
double r571132 = r571103 * r571112;
double r571133 = r571131 - r571132;
double r571134 = r571108 * r571133;
double r571135 = r571130 - r571134;
double r571136 = r571135 + r571124;
double r571137 = -1.8647218723984152e-272;
bool r571138 = r571095 <= r571137;
double r571139 = r571111 + r571105;
double r571140 = r571114 - r571139;
double r571141 = r571109 * r571102;
double r571142 = r571099 * r571112;
double r571143 = r571141 - r571142;
double r571144 = r571118 * r571143;
double r571145 = r571140 + r571144;
double r571146 = -6.628575237567785e-290;
bool r571147 = r571095 <= r571146;
double r571148 = r571103 * r571102;
double r571149 = r571100 - r571148;
double r571150 = r571098 * r571149;
double r571151 = r571150 - r571134;
double r571152 = cbrt(r571118);
double r571153 = r571152 * r571152;
double r571154 = r571152 * r571143;
double r571155 = r571153 * r571154;
double r571156 = r571151 + r571155;
double r571157 = 5.886583142604684e-202;
bool r571158 = r571095 <= r571157;
double r571159 = r571107 - r571134;
double r571160 = r571102 * r571118;
double r571161 = r571160 * r571109;
double r571162 = r571161 + r571123;
double r571163 = r571159 + r571162;
double r571164 = 79.85626140011546;
bool r571165 = r571095 <= r571164;
double r571166 = r571165 ? r571156 : r571136;
double r571167 = r571158 ? r571163 : r571166;
double r571168 = r571147 ? r571156 : r571167;
double r571169 = r571138 ? r571145 : r571168;
double r571170 = r571127 ? r571136 : r571169;
double r571171 = r571097 ? r571125 : r571170;
return r571171;
}




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.8 |
|---|---|
| Target | 19.6 |
| Herbie | 11.4 |
if z < -9.965934507395226e+65Initial program 19.3
rmApplied sub-neg19.3
Applied distribute-lft-in19.3
Simplified19.4
rmApplied distribute-rgt-neg-out19.4
Simplified19.4
rmApplied sub-neg19.4
Applied distribute-lft-in19.4
Simplified18.1
rmApplied sub-neg18.1
Applied distribute-lft-in18.1
Simplified13.0
Simplified12.7
if -9.965934507395226e+65 < z < -4.689883489295012e-216 or 79.85626140011546 < z Initial program 12.2
rmApplied sub-neg12.2
Applied distribute-lft-in12.2
Simplified12.5
rmApplied distribute-rgt-neg-out12.5
Simplified12.8
rmApplied sub-neg12.8
Applied distribute-lft-in12.8
Simplified12.9
rmApplied associate-*r*12.2
if -4.689883489295012e-216 < z < -1.8647218723984152e-272Initial program 8.8
Taylor expanded around inf 16.1
if -1.8647218723984152e-272 < z < -6.628575237567785e-290 or 5.886583142604684e-202 < z < 79.85626140011546Initial program 8.1
rmApplied add-cube-cbrt8.5
Applied associate-*l*8.4
if -6.628575237567785e-290 < z < 5.886583142604684e-202Initial program 9.4
rmApplied sub-neg9.4
Applied distribute-lft-in9.4
Simplified10.5
rmApplied distribute-rgt-neg-out10.5
Simplified10.0
rmApplied sub-neg10.0
Applied distribute-lft-in10.0
Simplified10.0
rmApplied associate-*r*9.9
Final simplification11.4
herbie shell --seed 2019305
(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.46969429677770502e-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)))))