\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)
\begin{array}{l}
\mathbf{if}\;x \le -3.3735883346778377 \cdot 10^{-126}:\\
\;\;\;\;\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 - i \cdot a\right)\right) + \left(j \cdot \left(\sqrt[3]{c \cdot t - i \cdot y} \cdot \sqrt[3]{c \cdot t - i \cdot y}\right)\right) \cdot \sqrt[3]{c \cdot t - i \cdot y}\\
\mathbf{elif}\;x \le 3.288698165822717 \cdot 10^{-124}:\\
\;\;\;\;\left(0 - b \cdot \left(c \cdot z - i \cdot a\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;\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) - \left(b \cdot \left(\sqrt[3]{c \cdot z - i \cdot a} \cdot \sqrt[3]{c \cdot z - i \cdot a}\right)\right) \cdot \sqrt[3]{c \cdot z - i \cdot a}\right) + \left(j \cdot \mathsf{fma}\left(c, t, -y \cdot i\right) + j \cdot \mathsf{fma}\left(-y, i, y \cdot i\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 r530551 = x;
double r530552 = y;
double r530553 = z;
double r530554 = r530552 * r530553;
double r530555 = t;
double r530556 = a;
double r530557 = r530555 * r530556;
double r530558 = r530554 - r530557;
double r530559 = r530551 * r530558;
double r530560 = b;
double r530561 = c;
double r530562 = r530561 * r530553;
double r530563 = i;
double r530564 = r530563 * r530556;
double r530565 = r530562 - r530564;
double r530566 = r530560 * r530565;
double r530567 = r530559 - r530566;
double r530568 = j;
double r530569 = r530561 * r530555;
double r530570 = r530563 * r530552;
double r530571 = r530569 - r530570;
double r530572 = r530568 * r530571;
double r530573 = r530567 + r530572;
return r530573;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r530574 = x;
double r530575 = -3.373588334677838e-126;
bool r530576 = r530574 <= r530575;
double r530577 = y;
double r530578 = z;
double r530579 = a;
double r530580 = t;
double r530581 = r530579 * r530580;
double r530582 = -r530581;
double r530583 = fma(r530577, r530578, r530582);
double r530584 = r530574 * r530583;
double r530585 = -r530579;
double r530586 = fma(r530585, r530580, r530581);
double r530587 = r530574 * r530586;
double r530588 = r530584 + r530587;
double r530589 = b;
double r530590 = c;
double r530591 = r530590 * r530578;
double r530592 = i;
double r530593 = r530592 * r530579;
double r530594 = r530591 - r530593;
double r530595 = r530589 * r530594;
double r530596 = r530588 - r530595;
double r530597 = j;
double r530598 = r530590 * r530580;
double r530599 = r530592 * r530577;
double r530600 = r530598 - r530599;
double r530601 = cbrt(r530600);
double r530602 = r530601 * r530601;
double r530603 = r530597 * r530602;
double r530604 = r530603 * r530601;
double r530605 = r530596 + r530604;
double r530606 = 3.288698165822717e-124;
bool r530607 = r530574 <= r530606;
double r530608 = 0.0;
double r530609 = r530608 - r530595;
double r530610 = r530597 * r530600;
double r530611 = r530609 + r530610;
double r530612 = cbrt(r530594);
double r530613 = r530612 * r530612;
double r530614 = r530589 * r530613;
double r530615 = r530614 * r530612;
double r530616 = r530588 - r530615;
double r530617 = r530577 * r530592;
double r530618 = -r530617;
double r530619 = fma(r530590, r530580, r530618);
double r530620 = r530597 * r530619;
double r530621 = -r530577;
double r530622 = fma(r530621, r530592, r530617);
double r530623 = r530597 * r530622;
double r530624 = r530620 + r530623;
double r530625 = r530616 + r530624;
double r530626 = r530607 ? r530611 : r530625;
double r530627 = r530576 ? r530605 : r530626;
return r530627;
}




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.0 |
|---|---|
| Target | 15.5 |
| Herbie | 12.7 |
if x < -3.373588334677838e-126Initial program 9.8
rmApplied prod-diff9.8
Applied distribute-lft-in9.8
rmApplied add-cube-cbrt10.0
Applied associate-*r*10.0
if -3.373588334677838e-126 < x < 3.288698165822717e-124Initial program 16.2
Taylor expanded around 0 17.6
if 3.288698165822717e-124 < x Initial program 9.3
rmApplied prod-diff9.3
Applied distribute-lft-in9.3
rmApplied prod-diff9.3
Applied distribute-lft-in9.3
rmApplied add-cube-cbrt9.5
Applied associate-*r*9.6
Final simplification12.7
herbie shell --seed 2020062 +o rules:numerics
(FPCore (x y z t a b c i j)
:name "Linear.Matrix:det33 from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< t -8.120978919195912e-33) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j))) (if (< t -4.712553818218485e-169) (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (/ (* j (- (pow (* c t) 2) (pow (* i y) 2))) (+ (* c t) (* i y)))) (if (< t -7.633533346031584e-308) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j))) (if (< t 1.0535888557455487e-139) (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (/ (* j (- (pow (* c t) 2) (pow (* i y) 2))) (+ (* c t) (* i y)))) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j)))))))
(+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (* j (- (* c t) (* i y)))))