\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}\;j \le -3.533433425377577084162084627135294593078 \cdot 10^{-69}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + \left(-b \cdot i\right) \cdot a\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)\\
\mathbf{elif}\;j \le 7.683957053609646520320388725480686187382 \cdot 10^{-152}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + b \cdot \left(-i \cdot a\right)\right)\right) + \left(t \cdot \left(j \cdot c\right) + \left(j \cdot i\right) \cdot \left(-y\right)\right)\\
\mathbf{elif}\;j \le 4.578744244050201741536238422863270325902 \cdot 10^{-35}:\\
\;\;\;\;\left(\left(x \cdot \left(y \cdot z\right) + \left(-a \cdot \left(x \cdot t\right)\right)\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(\left(\sqrt[3]{z \cdot \left(b \cdot c\right)} \cdot \sqrt[3]{z \cdot \left(b \cdot c\right)}\right) \cdot \sqrt[3]{z \cdot \left(b \cdot c\right)} + b \cdot \left(-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 r410095 = x;
double r410096 = y;
double r410097 = z;
double r410098 = r410096 * r410097;
double r410099 = t;
double r410100 = a;
double r410101 = r410099 * r410100;
double r410102 = r410098 - r410101;
double r410103 = r410095 * r410102;
double r410104 = b;
double r410105 = c;
double r410106 = r410105 * r410097;
double r410107 = i;
double r410108 = r410107 * r410100;
double r410109 = r410106 - r410108;
double r410110 = r410104 * r410109;
double r410111 = r410103 - r410110;
double r410112 = j;
double r410113 = r410105 * r410099;
double r410114 = r410107 * r410096;
double r410115 = r410113 - r410114;
double r410116 = r410112 * r410115;
double r410117 = r410111 + r410116;
return r410117;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r410118 = j;
double r410119 = -3.533433425377577e-69;
bool r410120 = r410118 <= r410119;
double r410121 = x;
double r410122 = y;
double r410123 = z;
double r410124 = r410122 * r410123;
double r410125 = t;
double r410126 = a;
double r410127 = r410125 * r410126;
double r410128 = r410124 - r410127;
double r410129 = r410121 * r410128;
double r410130 = b;
double r410131 = c;
double r410132 = r410130 * r410131;
double r410133 = r410123 * r410132;
double r410134 = i;
double r410135 = r410130 * r410134;
double r410136 = -r410135;
double r410137 = r410136 * r410126;
double r410138 = r410133 + r410137;
double r410139 = r410129 - r410138;
double r410140 = r410131 * r410125;
double r410141 = r410134 * r410122;
double r410142 = r410140 - r410141;
double r410143 = r410118 * r410142;
double r410144 = r410139 + r410143;
double r410145 = 7.683957053609647e-152;
bool r410146 = r410118 <= r410145;
double r410147 = r410134 * r410126;
double r410148 = -r410147;
double r410149 = r410130 * r410148;
double r410150 = r410133 + r410149;
double r410151 = r410129 - r410150;
double r410152 = r410118 * r410131;
double r410153 = r410125 * r410152;
double r410154 = r410118 * r410134;
double r410155 = -r410122;
double r410156 = r410154 * r410155;
double r410157 = r410153 + r410156;
double r410158 = r410151 + r410157;
double r410159 = 4.578744244050202e-35;
bool r410160 = r410118 <= r410159;
double r410161 = r410121 * r410124;
double r410162 = r410121 * r410125;
double r410163 = r410126 * r410162;
double r410164 = -r410163;
double r410165 = r410161 + r410164;
double r410166 = r410131 * r410123;
double r410167 = r410166 - r410147;
double r410168 = r410130 * r410167;
double r410169 = r410165 - r410168;
double r410170 = r410169 + r410143;
double r410171 = cbrt(r410133);
double r410172 = r410171 * r410171;
double r410173 = r410172 * r410171;
double r410174 = r410173 + r410149;
double r410175 = r410129 - r410174;
double r410176 = r410175 + r410143;
double r410177 = r410160 ? r410170 : r410176;
double r410178 = r410146 ? r410158 : r410177;
double r410179 = r410120 ? r410144 : r410178;
return r410179;
}




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 | 12.4 |
|---|---|
| Target | 16.2 |
| Herbie | 10.1 |
if j < -3.533433425377577e-69Initial program 8.0
rmApplied sub-neg8.0
Applied distribute-lft-in8.0
Simplified8.0
rmApplied distribute-lft-neg-in8.0
Applied associate-*r*8.6
Simplified8.6
if -3.533433425377577e-69 < j < 7.683957053609647e-152Initial program 17.4
rmApplied sub-neg17.4
Applied distribute-lft-in17.4
Simplified17.4
rmApplied sub-neg17.4
Applied distribute-lft-in17.4
Simplified14.0
rmApplied distribute-rgt-neg-in14.0
Applied associate-*r*10.8
if 7.683957053609647e-152 < j < 4.578744244050202e-35Initial program 12.9
rmApplied sub-neg12.9
Applied distribute-lft-in12.9
Simplified13.5
if 4.578744244050202e-35 < j Initial program 8.2
rmApplied sub-neg8.2
Applied distribute-lft-in8.2
Simplified8.5
rmApplied add-cube-cbrt8.6
Final simplification10.1
herbie shell --seed 2019235
(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.1209789191959122e-33) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j))) (if (< t -4.7125538182184851e-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.63353334603158369e-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)))))