\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 -4.8165491942895943 \cdot 10^{-263}:\\
\;\;\;\;\mathsf{fma}\left(i \cdot a - c \cdot z, b, \mathsf{fma}\left(j, c \cdot t - i \cdot y, \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}\right)\right)\\
\mathbf{elif}\;j \le 1.667884624892982 \cdot 10^{-102}:\\
\;\;\;\;\mathsf{fma}\left(i \cdot a - c \cdot z, b, y \cdot \left(x \cdot z - i \cdot j\right) - a \cdot \left(x \cdot t\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(i \cdot a - c \cdot z, b, \mathsf{fma}\left(j, c \cdot t - i \cdot y, x \cdot \left(y \cdot z\right) + \left(-t \cdot \left(x \cdot a\right)\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 r568037 = x;
double r568038 = y;
double r568039 = z;
double r568040 = r568038 * r568039;
double r568041 = t;
double r568042 = a;
double r568043 = r568041 * r568042;
double r568044 = r568040 - r568043;
double r568045 = r568037 * r568044;
double r568046 = b;
double r568047 = c;
double r568048 = r568047 * r568039;
double r568049 = i;
double r568050 = r568049 * r568042;
double r568051 = r568048 - r568050;
double r568052 = r568046 * r568051;
double r568053 = r568045 - r568052;
double r568054 = j;
double r568055 = r568047 * r568041;
double r568056 = r568049 * r568038;
double r568057 = r568055 - r568056;
double r568058 = r568054 * r568057;
double r568059 = r568053 + r568058;
return r568059;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r568060 = j;
double r568061 = -4.816549194289594e-263;
bool r568062 = r568060 <= r568061;
double r568063 = i;
double r568064 = a;
double r568065 = r568063 * r568064;
double r568066 = c;
double r568067 = z;
double r568068 = r568066 * r568067;
double r568069 = r568065 - r568068;
double r568070 = b;
double r568071 = t;
double r568072 = r568066 * r568071;
double r568073 = y;
double r568074 = r568063 * r568073;
double r568075 = r568072 - r568074;
double r568076 = x;
double r568077 = r568073 * r568067;
double r568078 = r568071 * r568064;
double r568079 = r568077 - r568078;
double r568080 = cbrt(r568079);
double r568081 = r568080 * r568080;
double r568082 = r568076 * r568081;
double r568083 = r568082 * r568080;
double r568084 = fma(r568060, r568075, r568083);
double r568085 = fma(r568069, r568070, r568084);
double r568086 = 1.667884624892982e-102;
bool r568087 = r568060 <= r568086;
double r568088 = r568076 * r568067;
double r568089 = r568063 * r568060;
double r568090 = r568088 - r568089;
double r568091 = r568073 * r568090;
double r568092 = r568076 * r568071;
double r568093 = r568064 * r568092;
double r568094 = r568091 - r568093;
double r568095 = fma(r568069, r568070, r568094);
double r568096 = r568076 * r568077;
double r568097 = r568076 * r568064;
double r568098 = r568071 * r568097;
double r568099 = -r568098;
double r568100 = r568096 + r568099;
double r568101 = fma(r568060, r568075, r568100);
double r568102 = fma(r568069, r568070, r568101);
double r568103 = r568087 ? r568095 : r568102;
double r568104 = r568062 ? r568085 : r568103;
return r568104;
}




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.9 |
|---|---|
| Target | 15.4 |
| Herbie | 11.3 |
if j < -4.816549194289594e-263Initial program 11.1
Simplified11.1
rmApplied add-cube-cbrt11.4
Applied associate-*r*11.4
if -4.816549194289594e-263 < j < 1.667884624892982e-102Initial program 16.7
Simplified16.7
rmApplied add-cube-cbrt17.0
Applied associate-*r*17.0
rmApplied add-cube-cbrt17.0
Applied cbrt-prod17.1
Taylor expanded around inf 14.6
Simplified13.6
if 1.667884624892982e-102 < j Initial program 8.6
Simplified8.6
rmApplied sub-neg8.6
Applied distribute-lft-in8.6
Simplified9.1
Final simplification11.3
herbie shell --seed 2020045 +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)))))