\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \cdot a\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)
\begin{array}{l}
\mathbf{if}\;t \le -2.170921980918471249066722659595249022854 \cdot 10^{-198}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(\left(\sqrt[3]{\left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(y4, c, -a \cdot y5\right)} \cdot \sqrt[3]{\left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(y4, c, -a \cdot y5\right)}\right) \cdot \sqrt[3]{\left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(y4, c, -a \cdot y5\right)} + \left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(-a, y5, a \cdot y5\right)\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)\\
\mathbf{elif}\;t \le 4.224835810085253984713968194681658884927 \cdot 10^{-259}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \mathsf{fma}\left(k, i \cdot \left(y \cdot y5\right), -\mathsf{fma}\left(t, i \cdot \left(j \cdot y5\right), k \cdot \left(y4 \cdot \left(y \cdot b\right)\right)\right)\right)\right) - \left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \cdot a\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)\\
\mathbf{elif}\;t \le 3.852001203169608621368313039789462383833 \cdot 10^{-38}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(\left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(y4, c, -a \cdot y5\right) + \left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(-a, y5, a \cdot y5\right)\right)\right) + \left(\sqrt[3]{\left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)} \cdot \sqrt[3]{\left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)}\right) \cdot \sqrt[3]{\left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(\mathsf{fma}\left(t, i \cdot \left(z \cdot c\right), -\mathsf{fma}\left(i, c \cdot \left(y \cdot x\right), a \cdot \left(t \cdot \left(z \cdot b\right)\right)\right)\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(\left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(y4, c, -a \cdot y5\right) + \left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(-a, y5, a \cdot y5\right)\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k, double y0, double y1, double y2, double y3, double y4, double y5) {
double r593048 = x;
double r593049 = y;
double r593050 = r593048 * r593049;
double r593051 = z;
double r593052 = t;
double r593053 = r593051 * r593052;
double r593054 = r593050 - r593053;
double r593055 = a;
double r593056 = b;
double r593057 = r593055 * r593056;
double r593058 = c;
double r593059 = i;
double r593060 = r593058 * r593059;
double r593061 = r593057 - r593060;
double r593062 = r593054 * r593061;
double r593063 = j;
double r593064 = r593048 * r593063;
double r593065 = k;
double r593066 = r593051 * r593065;
double r593067 = r593064 - r593066;
double r593068 = y0;
double r593069 = r593068 * r593056;
double r593070 = y1;
double r593071 = r593070 * r593059;
double r593072 = r593069 - r593071;
double r593073 = r593067 * r593072;
double r593074 = r593062 - r593073;
double r593075 = y2;
double r593076 = r593048 * r593075;
double r593077 = y3;
double r593078 = r593051 * r593077;
double r593079 = r593076 - r593078;
double r593080 = r593068 * r593058;
double r593081 = r593070 * r593055;
double r593082 = r593080 - r593081;
double r593083 = r593079 * r593082;
double r593084 = r593074 + r593083;
double r593085 = r593052 * r593063;
double r593086 = r593049 * r593065;
double r593087 = r593085 - r593086;
double r593088 = y4;
double r593089 = r593088 * r593056;
double r593090 = y5;
double r593091 = r593090 * r593059;
double r593092 = r593089 - r593091;
double r593093 = r593087 * r593092;
double r593094 = r593084 + r593093;
double r593095 = r593052 * r593075;
double r593096 = r593049 * r593077;
double r593097 = r593095 - r593096;
double r593098 = r593088 * r593058;
double r593099 = r593090 * r593055;
double r593100 = r593098 - r593099;
double r593101 = r593097 * r593100;
double r593102 = r593094 - r593101;
double r593103 = r593065 * r593075;
double r593104 = r593063 * r593077;
double r593105 = r593103 - r593104;
double r593106 = r593088 * r593070;
double r593107 = r593090 * r593068;
double r593108 = r593106 - r593107;
double r593109 = r593105 * r593108;
double r593110 = r593102 + r593109;
return r593110;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k, double y0, double y1, double y2, double y3, double y4, double y5) {
double r593111 = t;
double r593112 = -2.1709219809184712e-198;
bool r593113 = r593111 <= r593112;
double r593114 = x;
double r593115 = y;
double r593116 = r593114 * r593115;
double r593117 = z;
double r593118 = r593117 * r593111;
double r593119 = r593116 - r593118;
double r593120 = a;
double r593121 = b;
double r593122 = r593120 * r593121;
double r593123 = c;
double r593124 = i;
double r593125 = r593123 * r593124;
double r593126 = r593122 - r593125;
double r593127 = r593119 * r593126;
double r593128 = j;
double r593129 = r593114 * r593128;
double r593130 = k;
double r593131 = r593117 * r593130;
double r593132 = r593129 - r593131;
double r593133 = y0;
double r593134 = r593133 * r593121;
double r593135 = y1;
double r593136 = r593135 * r593124;
double r593137 = r593134 - r593136;
double r593138 = r593132 * r593137;
double r593139 = r593127 - r593138;
double r593140 = y2;
double r593141 = r593114 * r593140;
double r593142 = y3;
double r593143 = r593117 * r593142;
double r593144 = r593141 - r593143;
double r593145 = r593133 * r593123;
double r593146 = r593135 * r593120;
double r593147 = r593145 - r593146;
double r593148 = r593144 * r593147;
double r593149 = r593139 + r593148;
double r593150 = r593111 * r593128;
double r593151 = r593115 * r593130;
double r593152 = r593150 - r593151;
double r593153 = y4;
double r593154 = r593153 * r593121;
double r593155 = y5;
double r593156 = r593155 * r593124;
double r593157 = r593154 - r593156;
double r593158 = r593152 * r593157;
double r593159 = r593149 + r593158;
double r593160 = r593111 * r593140;
double r593161 = r593115 * r593142;
double r593162 = r593160 - r593161;
double r593163 = r593120 * r593155;
double r593164 = -r593163;
double r593165 = fma(r593153, r593123, r593164);
double r593166 = r593162 * r593165;
double r593167 = cbrt(r593166);
double r593168 = r593167 * r593167;
double r593169 = r593168 * r593167;
double r593170 = -r593120;
double r593171 = fma(r593170, r593155, r593163);
double r593172 = r593162 * r593171;
double r593173 = r593169 + r593172;
double r593174 = r593159 - r593173;
double r593175 = r593130 * r593140;
double r593176 = r593128 * r593142;
double r593177 = r593175 - r593176;
double r593178 = r593153 * r593135;
double r593179 = r593155 * r593133;
double r593180 = r593178 - r593179;
double r593181 = r593177 * r593180;
double r593182 = r593174 + r593181;
double r593183 = 4.224835810085254e-259;
bool r593184 = r593111 <= r593183;
double r593185 = r593115 * r593155;
double r593186 = r593124 * r593185;
double r593187 = r593128 * r593155;
double r593188 = r593124 * r593187;
double r593189 = r593115 * r593121;
double r593190 = r593153 * r593189;
double r593191 = r593130 * r593190;
double r593192 = fma(r593111, r593188, r593191);
double r593193 = -r593192;
double r593194 = fma(r593130, r593186, r593193);
double r593195 = r593149 + r593194;
double r593196 = r593153 * r593123;
double r593197 = r593155 * r593120;
double r593198 = r593196 - r593197;
double r593199 = r593162 * r593198;
double r593200 = r593195 - r593199;
double r593201 = r593200 + r593181;
double r593202 = 3.8520012031696086e-38;
bool r593203 = r593111 <= r593202;
double r593204 = r593166 + r593172;
double r593205 = r593159 - r593204;
double r593206 = cbrt(r593181);
double r593207 = r593206 * r593206;
double r593208 = r593207 * r593206;
double r593209 = r593205 + r593208;
double r593210 = r593117 * r593123;
double r593211 = r593124 * r593210;
double r593212 = r593115 * r593114;
double r593213 = r593123 * r593212;
double r593214 = r593117 * r593121;
double r593215 = r593111 * r593214;
double r593216 = r593120 * r593215;
double r593217 = fma(r593124, r593213, r593216);
double r593218 = -r593217;
double r593219 = fma(r593111, r593211, r593218);
double r593220 = r593219 - r593138;
double r593221 = r593220 + r593148;
double r593222 = r593221 + r593158;
double r593223 = r593222 - r593204;
double r593224 = r593223 + r593181;
double r593225 = r593203 ? r593209 : r593224;
double r593226 = r593184 ? r593201 : r593225;
double r593227 = r593113 ? r593182 : r593226;
return r593227;
}




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




Bits error versus k




Bits error versus y0




Bits error versus y1




Bits error versus y2




Bits error versus y3




Bits error versus y4




Bits error versus y5
| Original | 27.2 |
|---|---|
| Target | 31.0 |
| Herbie | 27.9 |
if t < -2.1709219809184712e-198Initial program 28.1
rmApplied prod-diff28.1
Applied distribute-lft-in28.1
rmApplied add-cube-cbrt28.2
if -2.1709219809184712e-198 < t < 4.224835810085254e-259Initial program 27.1
Taylor expanded around inf 29.2
Simplified29.2
if 4.224835810085254e-259 < t < 3.8520012031696086e-38Initial program 25.3
rmApplied prod-diff25.3
Applied distribute-lft-in25.3
rmApplied add-cube-cbrt25.4
if 3.8520012031696086e-38 < t Initial program 27.7
rmApplied prod-diff27.7
Applied distribute-lft-in27.7
Taylor expanded around inf 29.0
Simplified29.0
Final simplification27.9
herbie shell --seed 2020001 +o rules:numerics
(FPCore (x y z t a b c i j k y0 y1 y2 y3 y4 y5)
:name "Linear.Matrix:det44 from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< y4 -7.206256231996481e+60) (- (- (* (- (* b a) (* i c)) (- (* y x) (* t z))) (- (* (- (* j x) (* k z)) (- (* y0 b) (* i y1))) (* (- (* j t) (* k y)) (- (* y4 b) (* y5 i))))) (- (/ (- (* y2 t) (* y3 y)) (/ 1 (- (* y4 c) (* y5 a)))) (* (- (* y2 k) (* y3 j)) (- (* y4 y1) (* y5 y0))))) (if (< y4 -3.364603505246317e-66) (+ (- (- (- (* (* t c) (* i z)) (* (* a t) (* b z))) (* (* y c) (* i x))) (* (- (* b y0) (* i y1)) (- (* j x) (* k z)))) (- (* (- (* y0 c) (* a y1)) (- (* x y2) (* z y3))) (- (* (- (* t y2) (* y y3)) (- (* y4 c) (* a y5))) (* (- (* y1 y4) (* y5 y0)) (- (* k y2) (* j y3)))))) (if (< y4 -1.2000065055686116e-105) (+ (+ (- (* (- (* j t) (* k y)) (- (* y4 b) (* y5 i))) (* (* y3 y) (- (* y5 a) (* y4 c)))) (+ (* (* y5 a) (* t y2)) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* x y2) (* z y3)) (- (* c y0) (* a y1))) (- (* (- (* b y0) (* i y1)) (- (* j x) (* k z))) (* (- (* y x) (* z t)) (- (* b a) (* i c)))))) (if (< y4 6.718963124057495e-279) (+ (- (- (- (* (* k y) (* y5 i)) (* (* y b) (* y4 k))) (* (* y5 t) (* i j))) (- (* (- (* y2 t) (* y3 y)) (- (* y4 c) (* y5 a))) (* (- (* y2 k) (* y3 j)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* b a) (* i c)) (- (* y x) (* t z))) (- (* (- (* j x) (* k z)) (- (* y0 b) (* i y1))) (* (- (* y2 x) (* y3 z)) (- (* c y0) (* y1 a)))))) (if (< y4 4.77962681403792e-222) (+ (+ (- (* (- (* j t) (* k y)) (- (* y4 b) (* y5 i))) (* (* y3 y) (- (* y5 a) (* y4 c)))) (+ (* (* y5 a) (* t y2)) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* x y2) (* z y3)) (- (* c y0) (* a y1))) (- (* (- (* b y0) (* i y1)) (- (* j x) (* k z))) (* (- (* y x) (* z t)) (- (* b a) (* i c)))))) (if (< y4 2.2852241541266835e-175) (+ (- (- (- (* (* k y) (* y5 i)) (* (* y b) (* y4 k))) (* (* y5 t) (* i j))) (- (* (- (* y2 t) (* y3 y)) (- (* y4 c) (* y5 a))) (* (- (* y2 k) (* y3 j)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* b a) (* i c)) (- (* y x) (* t z))) (- (* (- (* j x) (* k z)) (- (* y0 b) (* i y1))) (* (- (* y2 x) (* y3 z)) (- (* c y0) (* y1 a)))))) (+ (- (+ (+ (- (* (- (* x y) (* z t)) (- (* a b) (* c i))) (- (* k (* i (* z y1))) (+ (* j (* i (* x y1))) (* y0 (* k (* z b)))))) (- (* z (* y3 (* a y1))) (+ (* y2 (* x (* a y1))) (* y0 (* z (* c y3)))))) (* (- (* t j) (* y k)) (- (* y4 b) (* y5 i)))) (* (- (* t y2) (* y y3)) (- (* y4 c) (* y5 a)))) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0))))))))))
(+ (- (+ (+ (- (* (- (* x y) (* z t)) (- (* a b) (* c i))) (* (- (* x j) (* z k)) (- (* y0 b) (* y1 i)))) (* (- (* x y2) (* z y3)) (- (* y0 c) (* y1 a)))) (* (- (* t j) (* y k)) (- (* y4 b) (* y5 i)))) (* (- (* t y2) (* y y3)) (- (* y4 c) (* y5 a)))) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0)))))