\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}\;c \le -1.9305679930456847 \cdot 10^{-114}:\\
\;\;\;\;\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}\;c \le -5.3574621633719819 \cdot 10^{-182}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \mathsf{fma}\left(k, i \cdot \left(z \cdot y1\right), -\mathsf{fma}\left(i, j \cdot \left(y1 \cdot x\right), y0 \cdot \left(z \cdot \left(k \cdot b\right)\right)\right)\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)\\
\mathbf{elif}\;c \le -4.7881710095145676 \cdot 10^{-189}:\\
\;\;\;\;\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) + 0\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}\;c \le 5.5754366338913007 \cdot 10^{-56}:\\
\;\;\;\;\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) + \mathsf{fma}\left(a, y3 \cdot \left(y1 \cdot z\right), -\mathsf{fma}\left(y0, z \cdot \left(y3 \cdot c\right), a \cdot \left(x \cdot \left(y2 \cdot y1\right)\right)\right)\right)\right) + \left(\left(t \cdot j - y \cdot k\right) \cdot \mathsf{fma}\left(y4, b, -i \cdot y5\right) + \left(t \cdot j - y \cdot k\right) \cdot \mathsf{fma}\left(-i, y5, i \cdot y5\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{else}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(\left(x \cdot j - z \cdot k\right) \cdot \left(\sqrt[3]{y0 \cdot b - y1 \cdot i} \cdot \sqrt[3]{y0 \cdot b - y1 \cdot i}\right)\right) \cdot \sqrt[3]{y0 \cdot b - y1 \cdot i}\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(\left(t \cdot j - y \cdot k\right) \cdot \mathsf{fma}\left(y4, b, -i \cdot y5\right) + \left(t \cdot j - y \cdot k\right) \cdot \mathsf{fma}\left(-i, y5, i \cdot y5\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)\\
\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 r691158 = x;
double r691159 = y;
double r691160 = r691158 * r691159;
double r691161 = z;
double r691162 = t;
double r691163 = r691161 * r691162;
double r691164 = r691160 - r691163;
double r691165 = a;
double r691166 = b;
double r691167 = r691165 * r691166;
double r691168 = c;
double r691169 = i;
double r691170 = r691168 * r691169;
double r691171 = r691167 - r691170;
double r691172 = r691164 * r691171;
double r691173 = j;
double r691174 = r691158 * r691173;
double r691175 = k;
double r691176 = r691161 * r691175;
double r691177 = r691174 - r691176;
double r691178 = y0;
double r691179 = r691178 * r691166;
double r691180 = y1;
double r691181 = r691180 * r691169;
double r691182 = r691179 - r691181;
double r691183 = r691177 * r691182;
double r691184 = r691172 - r691183;
double r691185 = y2;
double r691186 = r691158 * r691185;
double r691187 = y3;
double r691188 = r691161 * r691187;
double r691189 = r691186 - r691188;
double r691190 = r691178 * r691168;
double r691191 = r691180 * r691165;
double r691192 = r691190 - r691191;
double r691193 = r691189 * r691192;
double r691194 = r691184 + r691193;
double r691195 = r691162 * r691173;
double r691196 = r691159 * r691175;
double r691197 = r691195 - r691196;
double r691198 = y4;
double r691199 = r691198 * r691166;
double r691200 = y5;
double r691201 = r691200 * r691169;
double r691202 = r691199 - r691201;
double r691203 = r691197 * r691202;
double r691204 = r691194 + r691203;
double r691205 = r691162 * r691185;
double r691206 = r691159 * r691187;
double r691207 = r691205 - r691206;
double r691208 = r691198 * r691168;
double r691209 = r691200 * r691165;
double r691210 = r691208 - r691209;
double r691211 = r691207 * r691210;
double r691212 = r691204 - r691211;
double r691213 = r691175 * r691185;
double r691214 = r691173 * r691187;
double r691215 = r691213 - r691214;
double r691216 = r691198 * r691180;
double r691217 = r691200 * r691178;
double r691218 = r691216 - r691217;
double r691219 = r691215 * r691218;
double r691220 = r691212 + r691219;
return r691220;
}
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 r691221 = c;
double r691222 = -1.9305679930456847e-114;
bool r691223 = r691221 <= r691222;
double r691224 = x;
double r691225 = y;
double r691226 = r691224 * r691225;
double r691227 = z;
double r691228 = t;
double r691229 = r691227 * r691228;
double r691230 = r691226 - r691229;
double r691231 = a;
double r691232 = b;
double r691233 = r691231 * r691232;
double r691234 = i;
double r691235 = r691221 * r691234;
double r691236 = r691233 - r691235;
double r691237 = r691230 * r691236;
double r691238 = j;
double r691239 = r691224 * r691238;
double r691240 = k;
double r691241 = r691227 * r691240;
double r691242 = r691239 - r691241;
double r691243 = y0;
double r691244 = r691243 * r691232;
double r691245 = y1;
double r691246 = r691245 * r691234;
double r691247 = r691244 - r691246;
double r691248 = r691242 * r691247;
double r691249 = r691237 - r691248;
double r691250 = y2;
double r691251 = r691224 * r691250;
double r691252 = y3;
double r691253 = r691227 * r691252;
double r691254 = r691251 - r691253;
double r691255 = r691243 * r691221;
double r691256 = r691245 * r691231;
double r691257 = r691255 - r691256;
double r691258 = r691254 * r691257;
double r691259 = r691249 + r691258;
double r691260 = y5;
double r691261 = r691225 * r691260;
double r691262 = r691234 * r691261;
double r691263 = r691238 * r691260;
double r691264 = r691234 * r691263;
double r691265 = y4;
double r691266 = r691225 * r691232;
double r691267 = r691265 * r691266;
double r691268 = r691240 * r691267;
double r691269 = fma(r691228, r691264, r691268);
double r691270 = -r691269;
double r691271 = fma(r691240, r691262, r691270);
double r691272 = r691259 + r691271;
double r691273 = r691228 * r691250;
double r691274 = r691225 * r691252;
double r691275 = r691273 - r691274;
double r691276 = r691265 * r691221;
double r691277 = r691260 * r691231;
double r691278 = r691276 - r691277;
double r691279 = r691275 * r691278;
double r691280 = r691272 - r691279;
double r691281 = r691240 * r691250;
double r691282 = r691238 * r691252;
double r691283 = r691281 - r691282;
double r691284 = r691265 * r691245;
double r691285 = r691260 * r691243;
double r691286 = r691284 - r691285;
double r691287 = r691283 * r691286;
double r691288 = r691280 + r691287;
double r691289 = -5.357462163371982e-182;
bool r691290 = r691221 <= r691289;
double r691291 = r691227 * r691245;
double r691292 = r691234 * r691291;
double r691293 = r691245 * r691224;
double r691294 = r691238 * r691293;
double r691295 = r691240 * r691232;
double r691296 = r691227 * r691295;
double r691297 = r691243 * r691296;
double r691298 = fma(r691234, r691294, r691297);
double r691299 = -r691298;
double r691300 = fma(r691240, r691292, r691299);
double r691301 = r691237 - r691300;
double r691302 = r691301 + r691258;
double r691303 = r691228 * r691238;
double r691304 = r691225 * r691240;
double r691305 = r691303 - r691304;
double r691306 = r691265 * r691232;
double r691307 = r691260 * r691234;
double r691308 = r691306 - r691307;
double r691309 = r691305 * r691308;
double r691310 = r691302 + r691309;
double r691311 = r691310 - r691279;
double r691312 = r691311 + r691287;
double r691313 = -4.7881710095145676e-189;
bool r691314 = r691221 <= r691313;
double r691315 = 0.0;
double r691316 = r691259 + r691315;
double r691317 = r691316 - r691279;
double r691318 = r691317 + r691287;
double r691319 = 5.575436633891301e-56;
bool r691320 = r691221 <= r691319;
double r691321 = r691245 * r691227;
double r691322 = r691252 * r691321;
double r691323 = r691252 * r691221;
double r691324 = r691227 * r691323;
double r691325 = r691250 * r691245;
double r691326 = r691224 * r691325;
double r691327 = r691231 * r691326;
double r691328 = fma(r691243, r691324, r691327);
double r691329 = -r691328;
double r691330 = fma(r691231, r691322, r691329);
double r691331 = r691249 + r691330;
double r691332 = r691234 * r691260;
double r691333 = -r691332;
double r691334 = fma(r691265, r691232, r691333);
double r691335 = r691305 * r691334;
double r691336 = -r691234;
double r691337 = fma(r691336, r691260, r691332);
double r691338 = r691305 * r691337;
double r691339 = r691335 + r691338;
double r691340 = r691331 + r691339;
double r691341 = r691340 - r691279;
double r691342 = r691341 + r691287;
double r691343 = cbrt(r691247);
double r691344 = r691343 * r691343;
double r691345 = r691242 * r691344;
double r691346 = r691345 * r691343;
double r691347 = r691237 - r691346;
double r691348 = r691347 + r691258;
double r691349 = r691348 + r691339;
double r691350 = r691349 - r691279;
double r691351 = r691350 + r691287;
double r691352 = r691320 ? r691342 : r691351;
double r691353 = r691314 ? r691318 : r691352;
double r691354 = r691290 ? r691312 : r691353;
double r691355 = r691223 ? r691288 : r691354;
return r691355;
}




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 | 26.9 |
|---|---|
| Target | 30.5 |
| Herbie | 27.9 |
if c < -1.9305679930456847e-114Initial program 26.8
Taylor expanded around inf 28.9
Simplified28.9
if -1.9305679930456847e-114 < c < -5.357462163371982e-182Initial program 26.2
Taylor expanded around inf 28.2
Simplified28.2
if -5.357462163371982e-182 < c < -4.7881710095145676e-189Initial program 29.9
Taylor expanded around 0 31.3
if -4.7881710095145676e-189 < c < 5.575436633891301e-56Initial program 27.0
rmApplied prod-diff27.0
Applied distribute-lft-in27.0
Taylor expanded around inf 27.6
Simplified27.6
if 5.575436633891301e-56 < c Initial program 26.8
rmApplied prod-diff26.8
Applied distribute-lft-in26.8
rmApplied add-cube-cbrt26.9
Applied associate-*r*26.9
Final simplification27.9
herbie shell --seed 2020059 +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)))))