\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}\;b \le -1.5692136620466682 \cdot 10^{-239}:\\
\;\;\;\;\left(\left(x \cdot \left(\sqrt[3]{y \cdot z - t \cdot a} \cdot \sqrt[3]{y \cdot z - t \cdot a}\right)\right) \cdot \sqrt[3]{y \cdot z - t \cdot a} - b \cdot \left(c \cdot z - i \cdot a\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)\\
\mathbf{elif}\;b \le 1.0943761154691478 \cdot 10^{-178}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - 0\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{else}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \sqrt{b} \cdot \left(\sqrt{b} \cdot \left(c \cdot z - i \cdot a\right)\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r674690 = x;
double r674691 = y;
double r674692 = z;
double r674693 = r674691 * r674692;
double r674694 = t;
double r674695 = a;
double r674696 = r674694 * r674695;
double r674697 = r674693 - r674696;
double r674698 = r674690 * r674697;
double r674699 = b;
double r674700 = c;
double r674701 = r674700 * r674692;
double r674702 = i;
double r674703 = r674702 * r674695;
double r674704 = r674701 - r674703;
double r674705 = r674699 * r674704;
double r674706 = r674698 - r674705;
double r674707 = j;
double r674708 = r674700 * r674694;
double r674709 = r674702 * r674691;
double r674710 = r674708 - r674709;
double r674711 = r674707 * r674710;
double r674712 = r674706 + r674711;
return r674712;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r674713 = b;
double r674714 = -1.5692136620466682e-239;
bool r674715 = r674713 <= r674714;
double r674716 = x;
double r674717 = y;
double r674718 = z;
double r674719 = r674717 * r674718;
double r674720 = t;
double r674721 = a;
double r674722 = r674720 * r674721;
double r674723 = r674719 - r674722;
double r674724 = cbrt(r674723);
double r674725 = r674724 * r674724;
double r674726 = r674716 * r674725;
double r674727 = r674726 * r674724;
double r674728 = c;
double r674729 = r674728 * r674718;
double r674730 = i;
double r674731 = r674730 * r674721;
double r674732 = r674729 - r674731;
double r674733 = r674713 * r674732;
double r674734 = r674727 - r674733;
double r674735 = j;
double r674736 = r674728 * r674720;
double r674737 = r674730 * r674717;
double r674738 = r674736 - r674737;
double r674739 = r674735 * r674738;
double r674740 = r674734 + r674739;
double r674741 = 1.0943761154691478e-178;
bool r674742 = r674713 <= r674741;
double r674743 = r674716 * r674723;
double r674744 = 0.0;
double r674745 = r674743 - r674744;
double r674746 = cbrt(r674738);
double r674747 = r674746 * r674746;
double r674748 = r674735 * r674747;
double r674749 = r674748 * r674746;
double r674750 = r674745 + r674749;
double r674751 = sqrt(r674713);
double r674752 = r674751 * r674732;
double r674753 = r674751 * r674752;
double r674754 = r674743 - r674753;
double r674755 = r674754 + r674739;
double r674756 = r674742 ? r674750 : r674755;
double r674757 = r674715 ? r674740 : r674756;
return r674757;
}




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 | 11.8 |
|---|---|
| Target | 15.7 |
| Herbie | 12.0 |
if b < -1.5692136620466682e-239Initial program 10.3
rmApplied add-cube-cbrt10.5
Applied associate-*r*10.5
if -1.5692136620466682e-239 < b < 1.0943761154691478e-178Initial program 17.4
rmApplied add-cube-cbrt17.7
Applied associate-*r*17.7
Taylor expanded around 0 17.5
if 1.0943761154691478e-178 < b Initial program 10.5
rmApplied add-sqr-sqrt10.6
Applied associate-*l*10.6
Final simplification12.0
herbie shell --seed 2020057
(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)))))