\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}\;y4 \le -1.141043199035872955793993253485594947058 \cdot 10^{-144} \lor \neg \left(y4 \le 1.505926449921851627263221841026874965439 \cdot 10^{-268} \lor \neg \left(y4 \le 1.10648180373074739350468598992557420036 \cdot 10^{-143}\right) \land y4 \le 9269207004634505703164194894905344\right):\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(k \cdot \left(i \cdot \left(z \cdot y1\right)\right) - \left(i \cdot \left(j \cdot \left(y1 \cdot x\right)\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{else}:\\
\;\;\;\;\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(k \cdot \left(i \cdot \left(y \cdot y5\right)\right) - \left(t \cdot \left(i \cdot \left(j \cdot y5\right)\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)\\
\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 r696368 = x;
double r696369 = y;
double r696370 = r696368 * r696369;
double r696371 = z;
double r696372 = t;
double r696373 = r696371 * r696372;
double r696374 = r696370 - r696373;
double r696375 = a;
double r696376 = b;
double r696377 = r696375 * r696376;
double r696378 = c;
double r696379 = i;
double r696380 = r696378 * r696379;
double r696381 = r696377 - r696380;
double r696382 = r696374 * r696381;
double r696383 = j;
double r696384 = r696368 * r696383;
double r696385 = k;
double r696386 = r696371 * r696385;
double r696387 = r696384 - r696386;
double r696388 = y0;
double r696389 = r696388 * r696376;
double r696390 = y1;
double r696391 = r696390 * r696379;
double r696392 = r696389 - r696391;
double r696393 = r696387 * r696392;
double r696394 = r696382 - r696393;
double r696395 = y2;
double r696396 = r696368 * r696395;
double r696397 = y3;
double r696398 = r696371 * r696397;
double r696399 = r696396 - r696398;
double r696400 = r696388 * r696378;
double r696401 = r696390 * r696375;
double r696402 = r696400 - r696401;
double r696403 = r696399 * r696402;
double r696404 = r696394 + r696403;
double r696405 = r696372 * r696383;
double r696406 = r696369 * r696385;
double r696407 = r696405 - r696406;
double r696408 = y4;
double r696409 = r696408 * r696376;
double r696410 = y5;
double r696411 = r696410 * r696379;
double r696412 = r696409 - r696411;
double r696413 = r696407 * r696412;
double r696414 = r696404 + r696413;
double r696415 = r696372 * r696395;
double r696416 = r696369 * r696397;
double r696417 = r696415 - r696416;
double r696418 = r696408 * r696378;
double r696419 = r696410 * r696375;
double r696420 = r696418 - r696419;
double r696421 = r696417 * r696420;
double r696422 = r696414 - r696421;
double r696423 = r696385 * r696395;
double r696424 = r696383 * r696397;
double r696425 = r696423 - r696424;
double r696426 = r696408 * r696390;
double r696427 = r696410 * r696388;
double r696428 = r696426 - r696427;
double r696429 = r696425 * r696428;
double r696430 = r696422 + r696429;
return r696430;
}
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 r696431 = y4;
double r696432 = -1.141043199035873e-144;
bool r696433 = r696431 <= r696432;
double r696434 = 1.5059264499218516e-268;
bool r696435 = r696431 <= r696434;
double r696436 = 1.1064818037307474e-143;
bool r696437 = r696431 <= r696436;
double r696438 = !r696437;
double r696439 = 9.269207004634506e+33;
bool r696440 = r696431 <= r696439;
bool r696441 = r696438 && r696440;
bool r696442 = r696435 || r696441;
double r696443 = !r696442;
bool r696444 = r696433 || r696443;
double r696445 = x;
double r696446 = y;
double r696447 = r696445 * r696446;
double r696448 = z;
double r696449 = t;
double r696450 = r696448 * r696449;
double r696451 = r696447 - r696450;
double r696452 = a;
double r696453 = b;
double r696454 = r696452 * r696453;
double r696455 = c;
double r696456 = i;
double r696457 = r696455 * r696456;
double r696458 = r696454 - r696457;
double r696459 = r696451 * r696458;
double r696460 = k;
double r696461 = y1;
double r696462 = r696448 * r696461;
double r696463 = r696456 * r696462;
double r696464 = r696460 * r696463;
double r696465 = j;
double r696466 = r696461 * r696445;
double r696467 = r696465 * r696466;
double r696468 = r696456 * r696467;
double r696469 = y0;
double r696470 = r696460 * r696453;
double r696471 = r696448 * r696470;
double r696472 = r696469 * r696471;
double r696473 = r696468 + r696472;
double r696474 = r696464 - r696473;
double r696475 = r696459 - r696474;
double r696476 = y2;
double r696477 = r696445 * r696476;
double r696478 = y3;
double r696479 = r696448 * r696478;
double r696480 = r696477 - r696479;
double r696481 = r696469 * r696455;
double r696482 = r696461 * r696452;
double r696483 = r696481 - r696482;
double r696484 = r696480 * r696483;
double r696485 = r696475 + r696484;
double r696486 = r696449 * r696465;
double r696487 = r696446 * r696460;
double r696488 = r696486 - r696487;
double r696489 = r696431 * r696453;
double r696490 = y5;
double r696491 = r696490 * r696456;
double r696492 = r696489 - r696491;
double r696493 = r696488 * r696492;
double r696494 = r696485 + r696493;
double r696495 = r696449 * r696476;
double r696496 = r696446 * r696478;
double r696497 = r696495 - r696496;
double r696498 = r696431 * r696455;
double r696499 = r696490 * r696452;
double r696500 = r696498 - r696499;
double r696501 = r696497 * r696500;
double r696502 = r696494 - r696501;
double r696503 = r696460 * r696476;
double r696504 = r696465 * r696478;
double r696505 = r696503 - r696504;
double r696506 = r696431 * r696461;
double r696507 = r696490 * r696469;
double r696508 = r696506 - r696507;
double r696509 = r696505 * r696508;
double r696510 = r696502 + r696509;
double r696511 = r696445 * r696465;
double r696512 = r696448 * r696460;
double r696513 = r696511 - r696512;
double r696514 = r696469 * r696453;
double r696515 = r696461 * r696456;
double r696516 = r696514 - r696515;
double r696517 = r696513 * r696516;
double r696518 = r696459 - r696517;
double r696519 = r696518 + r696484;
double r696520 = r696446 * r696490;
double r696521 = r696456 * r696520;
double r696522 = r696460 * r696521;
double r696523 = r696465 * r696490;
double r696524 = r696456 * r696523;
double r696525 = r696449 * r696524;
double r696526 = r696446 * r696453;
double r696527 = r696431 * r696526;
double r696528 = r696460 * r696527;
double r696529 = r696525 + r696528;
double r696530 = r696522 - r696529;
double r696531 = r696519 + r696530;
double r696532 = r696531 - r696501;
double r696533 = r696532 + r696509;
double r696534 = r696444 ? r696510 : r696533;
return r696534;
}




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
Results
| Original | 27.0 |
|---|---|
| Target | 30.9 |
| Herbie | 29.2 |
if y4 < -1.141043199035873e-144 or 1.5059264499218516e-268 < y4 < 1.1064818037307474e-143 or 9.269207004634506e+33 < y4 Initial program 27.8
Taylor expanded around inf 30.1
if -1.141043199035873e-144 < y4 < 1.5059264499218516e-268 or 1.1064818037307474e-143 < y4 < 9.269207004634506e+33Initial program 25.8
Taylor expanded around inf 27.8
Final simplification29.2
herbie shell --seed 2019350
(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)))))