\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 -0.003764833963061511:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(\left(-b \cdot \left(i \cdot t\right)\right) + c \cdot \left(b \cdot z\right)\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\mathbf{elif}\;a \le 3.8053230682781215 \cdot 10^{-186}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(\left(z \cdot c\right) \cdot b + \left(-t\right) \cdot \left(i \cdot b\right)\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(\left(-b \cdot \left(i \cdot t\right)\right) + c \cdot \left(b \cdot z\right)\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 r41819231 = x;
double r41819232 = y;
double r41819233 = z;
double r41819234 = r41819232 * r41819233;
double r41819235 = t;
double r41819236 = a;
double r41819237 = r41819235 * r41819236;
double r41819238 = r41819234 - r41819237;
double r41819239 = r41819231 * r41819238;
double r41819240 = b;
double r41819241 = c;
double r41819242 = r41819241 * r41819233;
double r41819243 = i;
double r41819244 = r41819235 * r41819243;
double r41819245 = r41819242 - r41819244;
double r41819246 = r41819240 * r41819245;
double r41819247 = r41819239 - r41819246;
double r41819248 = j;
double r41819249 = r41819241 * r41819236;
double r41819250 = r41819232 * r41819243;
double r41819251 = r41819249 - r41819250;
double r41819252 = r41819248 * r41819251;
double r41819253 = r41819247 + r41819252;
return r41819253;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r41819254 = a;
double r41819255 = -0.003764833963061511;
bool r41819256 = r41819254 <= r41819255;
double r41819257 = x;
double r41819258 = y;
double r41819259 = z;
double r41819260 = r41819258 * r41819259;
double r41819261 = t;
double r41819262 = r41819261 * r41819254;
double r41819263 = r41819260 - r41819262;
double r41819264 = r41819257 * r41819263;
double r41819265 = b;
double r41819266 = i;
double r41819267 = r41819266 * r41819261;
double r41819268 = r41819265 * r41819267;
double r41819269 = -r41819268;
double r41819270 = c;
double r41819271 = r41819265 * r41819259;
double r41819272 = r41819270 * r41819271;
double r41819273 = r41819269 + r41819272;
double r41819274 = r41819264 - r41819273;
double r41819275 = j;
double r41819276 = r41819270 * r41819254;
double r41819277 = r41819258 * r41819266;
double r41819278 = r41819276 - r41819277;
double r41819279 = r41819275 * r41819278;
double r41819280 = r41819274 + r41819279;
double r41819281 = 3.8053230682781215e-186;
bool r41819282 = r41819254 <= r41819281;
double r41819283 = r41819259 * r41819270;
double r41819284 = r41819283 * r41819265;
double r41819285 = -r41819261;
double r41819286 = r41819266 * r41819265;
double r41819287 = r41819285 * r41819286;
double r41819288 = r41819284 + r41819287;
double r41819289 = r41819264 - r41819288;
double r41819290 = r41819289 + r41819279;
double r41819291 = r41819282 ? r41819290 : r41819280;
double r41819292 = r41819256 ? r41819280 : r41819291;
return r41819292;
}




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.6 |
|---|---|
| Target | 20.5 |
| Herbie | 12.9 |
if a < -0.003764833963061511 or 3.8053230682781215e-186 < a Initial program 15.2
rmApplied sub-neg15.2
Applied distribute-rgt-in15.2
rmApplied associate-*l*15.8
if -0.003764833963061511 < a < 3.8053230682781215e-186Initial program 9.1
rmApplied sub-neg9.1
Applied distribute-rgt-in9.1
rmApplied distribute-lft-neg-in9.1
Applied associate-*l*8.9
Final simplification12.9
herbie shell --seed 2019165
(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)))))