\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}\;y \le -8.39273614561637652 \cdot 10^{98} \lor \neg \left(y \le 3.1039725660684998 \cdot 10^{119}\right):\\
\;\;\;\;\mathsf{fma}\left(t \cdot i - c \cdot z, b, y \cdot \left(x \cdot z - i \cdot j\right) - a \cdot \left(x \cdot t\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(t \cdot i - c \cdot z, b, \mathsf{fma}\left(j, c \cdot a - y \cdot i, \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(\sqrt[3]{x} \cdot \mathsf{fma}\left(y, z, -a \cdot t\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 r987363 = x;
double r987364 = y;
double r987365 = z;
double r987366 = r987364 * r987365;
double r987367 = t;
double r987368 = a;
double r987369 = r987367 * r987368;
double r987370 = r987366 - r987369;
double r987371 = r987363 * r987370;
double r987372 = b;
double r987373 = c;
double r987374 = r987373 * r987365;
double r987375 = i;
double r987376 = r987367 * r987375;
double r987377 = r987374 - r987376;
double r987378 = r987372 * r987377;
double r987379 = r987371 - r987378;
double r987380 = j;
double r987381 = r987373 * r987368;
double r987382 = r987364 * r987375;
double r987383 = r987381 - r987382;
double r987384 = r987380 * r987383;
double r987385 = r987379 + r987384;
return r987385;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r987386 = y;
double r987387 = -8.392736145616377e+98;
bool r987388 = r987386 <= r987387;
double r987389 = 3.1039725660684998e+119;
bool r987390 = r987386 <= r987389;
double r987391 = !r987390;
bool r987392 = r987388 || r987391;
double r987393 = t;
double r987394 = i;
double r987395 = r987393 * r987394;
double r987396 = c;
double r987397 = z;
double r987398 = r987396 * r987397;
double r987399 = r987395 - r987398;
double r987400 = b;
double r987401 = x;
double r987402 = r987401 * r987397;
double r987403 = j;
double r987404 = r987394 * r987403;
double r987405 = r987402 - r987404;
double r987406 = r987386 * r987405;
double r987407 = a;
double r987408 = r987401 * r987393;
double r987409 = r987407 * r987408;
double r987410 = r987406 - r987409;
double r987411 = fma(r987399, r987400, r987410);
double r987412 = r987396 * r987407;
double r987413 = r987386 * r987394;
double r987414 = r987412 - r987413;
double r987415 = cbrt(r987401);
double r987416 = r987415 * r987415;
double r987417 = r987407 * r987393;
double r987418 = -r987417;
double r987419 = fma(r987386, r987397, r987418);
double r987420 = r987415 * r987419;
double r987421 = r987416 * r987420;
double r987422 = fma(r987403, r987414, r987421);
double r987423 = fma(r987399, r987400, r987422);
double r987424 = r987392 ? r987411 : r987423;
return r987424;
}




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 | 11.9 |
|---|---|
| Target | 19.8 |
| Herbie | 10.1 |
if y < -8.392736145616377e+98 or 3.1039725660684998e+119 < y Initial program 21.3
Simplified21.3
rmApplied fma-neg21.3
Simplified21.3
rmApplied add-cube-cbrt21.5
Applied associate-*l*21.5
Taylor expanded around inf 23.6
Simplified11.9
if -8.392736145616377e+98 < y < 3.1039725660684998e+119Initial program 9.3
Simplified9.3
rmApplied fma-neg9.3
Simplified9.3
rmApplied add-cube-cbrt9.6
Applied associate-*l*9.6
Final simplification10.1
herbie shell --seed 2020047 +o rules:numerics
(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)))))