\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}\;a \le -14000959500.1202220916748046875:\\
\;\;\;\;\left(\left(x \cdot \left(z \cdot y\right) + \left(-a \cdot \left(x \cdot t\right)\right)\right) - \left(z \cdot \left(b \cdot c\right) + b \cdot \left(-t \cdot i\right)\right)\right) + \left(a \cdot \left(j \cdot c\right) + \left(-y \cdot i\right) \cdot j\right)\\
\mathbf{elif}\;a \le 3.137840021978250235813255271558351573377 \cdot 10^{-179}:\\
\;\;\;\;\left(a \cdot \left(j \cdot c\right) + \left(-y \cdot i\right) \cdot j\right) + \left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + \left(-t \cdot \left(i \cdot b\right)\right)\right)\right)\\
\mathbf{elif}\;a \le 2.443250679644193482510416222749876525206 \cdot 10^{-151}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(\left(z \cdot b\right) \cdot c + b \cdot \left(-t \cdot i\right)\right)\right) + \left(a \cdot \left(j \cdot c\right) + \left(-y \cdot i\right) \cdot j\right)\\
\mathbf{elif}\;a \le 1.022883629570418632375689571046330564205 \cdot 10^{-30}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + b \cdot \left(-t \cdot i\right)\right)\right) + \left(j \cdot \left(\sqrt[3]{c \cdot a - y \cdot i} \cdot \sqrt[3]{c \cdot a - y \cdot i}\right)\right) \cdot \sqrt[3]{c \cdot a - y \cdot i}\\
\mathbf{elif}\;a \le 4.257938883112592501203590710749532366243 \cdot 10^{101}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + b \cdot \left(-t \cdot i\right)\right)\right) + \left(a \cdot \left(j \cdot c\right) + \left(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(x \cdot \left(z \cdot y\right) + \left(-a \cdot \left(x \cdot t\right)\right)\right) - \left(z \cdot \left(b \cdot c\right) + b \cdot \left(-t \cdot i\right)\right)\right) + \left(a \cdot \left(j \cdot c\right) + \left(-y \cdot i\right) \cdot j\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r927193 = x;
double r927194 = y;
double r927195 = z;
double r927196 = r927194 * r927195;
double r927197 = t;
double r927198 = a;
double r927199 = r927197 * r927198;
double r927200 = r927196 - r927199;
double r927201 = r927193 * r927200;
double r927202 = b;
double r927203 = c;
double r927204 = r927203 * r927195;
double r927205 = i;
double r927206 = r927197 * r927205;
double r927207 = r927204 - r927206;
double r927208 = r927202 * r927207;
double r927209 = r927201 - r927208;
double r927210 = j;
double r927211 = r927203 * r927198;
double r927212 = r927194 * r927205;
double r927213 = r927211 - r927212;
double r927214 = r927210 * r927213;
double r927215 = r927209 + r927214;
return r927215;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r927216 = a;
double r927217 = -14000959500.120222;
bool r927218 = r927216 <= r927217;
double r927219 = x;
double r927220 = z;
double r927221 = y;
double r927222 = r927220 * r927221;
double r927223 = r927219 * r927222;
double r927224 = t;
double r927225 = r927219 * r927224;
double r927226 = r927216 * r927225;
double r927227 = -r927226;
double r927228 = r927223 + r927227;
double r927229 = b;
double r927230 = c;
double r927231 = r927229 * r927230;
double r927232 = r927220 * r927231;
double r927233 = i;
double r927234 = r927224 * r927233;
double r927235 = -r927234;
double r927236 = r927229 * r927235;
double r927237 = r927232 + r927236;
double r927238 = r927228 - r927237;
double r927239 = j;
double r927240 = r927239 * r927230;
double r927241 = r927216 * r927240;
double r927242 = r927221 * r927233;
double r927243 = -r927242;
double r927244 = r927243 * r927239;
double r927245 = r927241 + r927244;
double r927246 = r927238 + r927245;
double r927247 = 3.13784002197825e-179;
bool r927248 = r927216 <= r927247;
double r927249 = r927221 * r927220;
double r927250 = r927224 * r927216;
double r927251 = r927249 - r927250;
double r927252 = r927219 * r927251;
double r927253 = r927233 * r927229;
double r927254 = r927224 * r927253;
double r927255 = -r927254;
double r927256 = r927232 + r927255;
double r927257 = r927252 - r927256;
double r927258 = r927245 + r927257;
double r927259 = 2.4432506796441935e-151;
bool r927260 = r927216 <= r927259;
double r927261 = r927220 * r927229;
double r927262 = r927261 * r927230;
double r927263 = r927262 + r927236;
double r927264 = r927252 - r927263;
double r927265 = r927264 + r927245;
double r927266 = 1.0228836295704186e-30;
bool r927267 = r927216 <= r927266;
double r927268 = r927252 - r927237;
double r927269 = r927230 * r927216;
double r927270 = r927269 - r927242;
double r927271 = cbrt(r927270);
double r927272 = r927271 * r927271;
double r927273 = r927239 * r927272;
double r927274 = r927273 * r927271;
double r927275 = r927268 + r927274;
double r927276 = 4.2579388831125925e+101;
bool r927277 = r927216 <= r927276;
double r927278 = r927239 * r927221;
double r927279 = r927233 * r927278;
double r927280 = -r927279;
double r927281 = r927241 + r927280;
double r927282 = r927268 + r927281;
double r927283 = r927277 ? r927282 : r927246;
double r927284 = r927267 ? r927275 : r927283;
double r927285 = r927260 ? r927265 : r927284;
double r927286 = r927248 ? r927258 : r927285;
double r927287 = r927218 ? r927246 : r927286;
return r927287;
}




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.7 |
|---|---|
| Target | 20.4 |
| Herbie | 11.3 |
if a < -14000959500.120222 or 4.2579388831125925e+101 < a Initial program 19.5
rmApplied sub-neg19.5
Applied distribute-lft-in19.5
Simplified19.9
rmApplied sub-neg19.9
Applied distribute-lft-in19.9
Simplified15.1
Simplified15.1
rmApplied sub-neg15.1
Applied distribute-lft-in15.1
Simplified15.1
Simplified9.3
if -14000959500.120222 < a < 3.13784002197825e-179Initial program 9.6
rmApplied sub-neg9.6
Applied distribute-lft-in9.6
Simplified10.5
rmApplied sub-neg10.5
Applied distribute-lft-in10.5
Simplified13.2
Simplified13.2
rmApplied *-un-lft-identity13.2
Applied associate-*l*13.2
Simplified12.5
if 3.13784002197825e-179 < a < 2.4432506796441935e-151Initial program 11.8
rmApplied sub-neg11.8
Applied distribute-lft-in11.8
Simplified12.9
rmApplied sub-neg12.9
Applied distribute-lft-in12.9
Simplified16.8
Simplified16.8
rmApplied associate-*r*15.4
if 2.4432506796441935e-151 < a < 1.0228836295704186e-30Initial program 8.6
rmApplied sub-neg8.6
Applied distribute-lft-in8.6
Simplified10.5
rmApplied add-cube-cbrt10.9
Applied associate-*r*10.8
if 1.0228836295704186e-30 < a < 4.2579388831125925e+101Initial program 11.9
rmApplied sub-neg11.9
Applied distribute-lft-in11.9
Simplified12.5
rmApplied sub-neg12.5
Applied distribute-lft-in12.5
Simplified11.5
Simplified11.5
rmApplied distribute-lft-neg-out11.5
Simplified10.9
Final simplification11.3
herbie shell --seed 2019350
(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)))))