\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}\;i \le -2.7850060019532971 \cdot 10^{104} \lor \neg \left(i \le -1.19729850374981135 \cdot 10^{51}\right):\\
\;\;\;\;\left(\left(x \cdot \mathsf{fma}\left(y, z, -a \cdot t\right) + x \cdot \mathsf{fma}\left(-a, t, a \cdot t\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}:\\
\;\;\;\;\mathsf{fma}\left(t, i \cdot b, -\mathsf{fma}\left(z, b \cdot c, t \cdot \left(x \cdot a\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 r828530 = x;
double r828531 = y;
double r828532 = z;
double r828533 = r828531 * r828532;
double r828534 = t;
double r828535 = a;
double r828536 = r828534 * r828535;
double r828537 = r828533 - r828536;
double r828538 = r828530 * r828537;
double r828539 = b;
double r828540 = c;
double r828541 = r828540 * r828532;
double r828542 = i;
double r828543 = r828534 * r828542;
double r828544 = r828541 - r828543;
double r828545 = r828539 * r828544;
double r828546 = r828538 - r828545;
double r828547 = j;
double r828548 = r828540 * r828535;
double r828549 = r828531 * r828542;
double r828550 = r828548 - r828549;
double r828551 = r828547 * r828550;
double r828552 = r828546 + r828551;
return r828552;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r828553 = i;
double r828554 = -2.785006001953297e+104;
bool r828555 = r828553 <= r828554;
double r828556 = -1.1972985037498114e+51;
bool r828557 = r828553 <= r828556;
double r828558 = !r828557;
bool r828559 = r828555 || r828558;
double r828560 = x;
double r828561 = y;
double r828562 = z;
double r828563 = a;
double r828564 = t;
double r828565 = r828563 * r828564;
double r828566 = -r828565;
double r828567 = fma(r828561, r828562, r828566);
double r828568 = r828560 * r828567;
double r828569 = -r828563;
double r828570 = fma(r828569, r828564, r828565);
double r828571 = r828560 * r828570;
double r828572 = r828568 + r828571;
double r828573 = b;
double r828574 = c;
double r828575 = r828574 * r828562;
double r828576 = r828564 * r828553;
double r828577 = r828575 - r828576;
double r828578 = r828573 * r828577;
double r828579 = r828572 - r828578;
double r828580 = j;
double r828581 = r828574 * r828563;
double r828582 = r828561 * r828553;
double r828583 = r828581 - r828582;
double r828584 = r828580 * r828583;
double r828585 = r828579 + r828584;
double r828586 = r828553 * r828573;
double r828587 = r828573 * r828574;
double r828588 = r828560 * r828563;
double r828589 = r828564 * r828588;
double r828590 = fma(r828562, r828587, r828589);
double r828591 = -r828590;
double r828592 = fma(r828564, r828586, r828591);
double r828593 = r828559 ? r828585 : r828592;
return r828593;
}




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 | 12.3 |
|---|---|
| Target | 19.7 |
| Herbie | 13.2 |
if i < -2.785006001953297e+104 or -1.1972985037498114e+51 < i Initial program 12.3
rmApplied prod-diff12.3
Applied distribute-lft-in12.3
if -2.785006001953297e+104 < i < -1.1972985037498114e+51Initial program 12.6
Simplified12.6
Taylor expanded around inf 35.2
Simplified35.2
Final simplification13.2
herbie shell --seed 2020036 +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)))))