\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}\;a \le -2.38118333135362335 \cdot 10^{92} \lor \neg \left(a \le 3.66852259421464815 \cdot 10^{132}\right):\\
\;\;\;\;\mathsf{fma}\left(a, i \cdot b, -\mathsf{fma}\left(z, b \cdot c, a \cdot \left(x \cdot t\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(\left(\sqrt[3]{\sqrt[3]{c \cdot t - i \cdot y} \cdot \sqrt[3]{c \cdot t - i \cdot y}} \cdot \sqrt[3]{\sqrt[3]{c \cdot t - i \cdot y}}\right) \cdot \sqrt[3]{c \cdot t - i \cdot y}\right) \cdot \sqrt[3]{c \cdot t - i \cdot y}, j, x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - i \cdot a\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 r550087 = x;
double r550088 = y;
double r550089 = z;
double r550090 = r550088 * r550089;
double r550091 = t;
double r550092 = a;
double r550093 = r550091 * r550092;
double r550094 = r550090 - r550093;
double r550095 = r550087 * r550094;
double r550096 = b;
double r550097 = c;
double r550098 = r550097 * r550089;
double r550099 = i;
double r550100 = r550099 * r550092;
double r550101 = r550098 - r550100;
double r550102 = r550096 * r550101;
double r550103 = r550095 - r550102;
double r550104 = j;
double r550105 = r550097 * r550091;
double r550106 = r550099 * r550088;
double r550107 = r550105 - r550106;
double r550108 = r550104 * r550107;
double r550109 = r550103 + r550108;
return r550109;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r550110 = a;
double r550111 = -2.3811833313536233e+92;
bool r550112 = r550110 <= r550111;
double r550113 = 3.668522594214648e+132;
bool r550114 = r550110 <= r550113;
double r550115 = !r550114;
bool r550116 = r550112 || r550115;
double r550117 = i;
double r550118 = b;
double r550119 = r550117 * r550118;
double r550120 = z;
double r550121 = c;
double r550122 = r550118 * r550121;
double r550123 = x;
double r550124 = t;
double r550125 = r550123 * r550124;
double r550126 = r550110 * r550125;
double r550127 = fma(r550120, r550122, r550126);
double r550128 = -r550127;
double r550129 = fma(r550110, r550119, r550128);
double r550130 = r550121 * r550124;
double r550131 = y;
double r550132 = r550117 * r550131;
double r550133 = r550130 - r550132;
double r550134 = cbrt(r550133);
double r550135 = r550134 * r550134;
double r550136 = cbrt(r550135);
double r550137 = cbrt(r550134);
double r550138 = r550136 * r550137;
double r550139 = r550138 * r550134;
double r550140 = r550139 * r550134;
double r550141 = j;
double r550142 = r550131 * r550120;
double r550143 = r550124 * r550110;
double r550144 = r550142 - r550143;
double r550145 = r550123 * r550144;
double r550146 = r550121 * r550120;
double r550147 = r550117 * r550110;
double r550148 = r550146 - r550147;
double r550149 = r550118 * r550148;
double r550150 = r550145 - r550149;
double r550151 = fma(r550140, r550141, r550150);
double r550152 = r550116 ? r550129 : r550151;
return r550152;
}




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.8 |
|---|---|
| Target | 15.7 |
| Herbie | 12.2 |
if a < -2.3811833313536233e+92 or 3.668522594214648e+132 < a Initial program 21.0
Simplified21.0
Taylor expanded around inf 21.3
Simplified21.3
if -2.3811833313536233e+92 < a < 3.668522594214648e+132Initial program 9.4
Simplified9.4
rmApplied add-cube-cbrt9.7
rmApplied add-cube-cbrt9.7
Applied cbrt-prod9.8
Final simplification12.2
herbie shell --seed 2020057 +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)))))