\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}\;b \le -3.27866518127697491589097793635221070582 \cdot 10^{-58}:\\
\;\;\;\;\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 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}\;b \le 1.055571452163021928060913035838811390728 \cdot 10^{-109}:\\
\;\;\;\;\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(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(\sqrt[3]{\left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \cdot a\right)} \cdot \sqrt[3]{\left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \cdot a\right)}\right) \cdot \sqrt[3]{\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 r480446 = x;
double r480447 = y;
double r480448 = r480446 * r480447;
double r480449 = z;
double r480450 = t;
double r480451 = r480449 * r480450;
double r480452 = r480448 - r480451;
double r480453 = a;
double r480454 = b;
double r480455 = r480453 * r480454;
double r480456 = c;
double r480457 = i;
double r480458 = r480456 * r480457;
double r480459 = r480455 - r480458;
double r480460 = r480452 * r480459;
double r480461 = j;
double r480462 = r480446 * r480461;
double r480463 = k;
double r480464 = r480449 * r480463;
double r480465 = r480462 - r480464;
double r480466 = y0;
double r480467 = r480466 * r480454;
double r480468 = y1;
double r480469 = r480468 * r480457;
double r480470 = r480467 - r480469;
double r480471 = r480465 * r480470;
double r480472 = r480460 - r480471;
double r480473 = y2;
double r480474 = r480446 * r480473;
double r480475 = y3;
double r480476 = r480449 * r480475;
double r480477 = r480474 - r480476;
double r480478 = r480466 * r480456;
double r480479 = r480468 * r480453;
double r480480 = r480478 - r480479;
double r480481 = r480477 * r480480;
double r480482 = r480472 + r480481;
double r480483 = r480450 * r480461;
double r480484 = r480447 * r480463;
double r480485 = r480483 - r480484;
double r480486 = y4;
double r480487 = r480486 * r480454;
double r480488 = y5;
double r480489 = r480488 * r480457;
double r480490 = r480487 - r480489;
double r480491 = r480485 * r480490;
double r480492 = r480482 + r480491;
double r480493 = r480450 * r480473;
double r480494 = r480447 * r480475;
double r480495 = r480493 - r480494;
double r480496 = r480486 * r480456;
double r480497 = r480488 * r480453;
double r480498 = r480496 - r480497;
double r480499 = r480495 * r480498;
double r480500 = r480492 - r480499;
double r480501 = r480463 * r480473;
double r480502 = r480461 * r480475;
double r480503 = r480501 - r480502;
double r480504 = r480486 * r480468;
double r480505 = r480488 * r480466;
double r480506 = r480504 - r480505;
double r480507 = r480503 * r480506;
double r480508 = r480500 + r480507;
return r480508;
}
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 r480509 = b;
double r480510 = -3.278665181276975e-58;
bool r480511 = r480509 <= r480510;
double r480512 = x;
double r480513 = y;
double r480514 = r480512 * r480513;
double r480515 = z;
double r480516 = t;
double r480517 = r480515 * r480516;
double r480518 = r480514 - r480517;
double r480519 = a;
double r480520 = r480519 * r480509;
double r480521 = c;
double r480522 = i;
double r480523 = r480521 * r480522;
double r480524 = r480520 - r480523;
double r480525 = r480518 * r480524;
double r480526 = j;
double r480527 = r480512 * r480526;
double r480528 = k;
double r480529 = r480515 * r480528;
double r480530 = r480527 - r480529;
double r480531 = y0;
double r480532 = r480531 * r480509;
double r480533 = y1;
double r480534 = r480533 * r480522;
double r480535 = r480532 - r480534;
double r480536 = r480530 * r480535;
double r480537 = r480525 - r480536;
double r480538 = y2;
double r480539 = r480512 * r480538;
double r480540 = y3;
double r480541 = r480515 * r480540;
double r480542 = r480539 - r480541;
double r480543 = r480531 * r480521;
double r480544 = r480533 * r480519;
double r480545 = r480543 - r480544;
double r480546 = r480542 * r480545;
double r480547 = r480537 + r480546;
double r480548 = r480516 * r480538;
double r480549 = r480513 * r480540;
double r480550 = r480548 - r480549;
double r480551 = y4;
double r480552 = r480551 * r480521;
double r480553 = y5;
double r480554 = r480553 * r480519;
double r480555 = r480552 - r480554;
double r480556 = r480550 * r480555;
double r480557 = r480547 - r480556;
double r480558 = r480528 * r480538;
double r480559 = r480526 * r480540;
double r480560 = r480558 - r480559;
double r480561 = r480551 * r480533;
double r480562 = r480553 * r480531;
double r480563 = r480561 - r480562;
double r480564 = r480560 * r480563;
double r480565 = r480557 + r480564;
double r480566 = 1.0555714521630219e-109;
bool r480567 = r480509 <= r480566;
double r480568 = r480515 * r480533;
double r480569 = r480522 * r480568;
double r480570 = r480528 * r480569;
double r480571 = r480533 * r480512;
double r480572 = r480526 * r480571;
double r480573 = r480522 * r480572;
double r480574 = r480528 * r480509;
double r480575 = r480515 * r480574;
double r480576 = r480531 * r480575;
double r480577 = r480573 + r480576;
double r480578 = r480570 - r480577;
double r480579 = r480525 - r480578;
double r480580 = r480579 + r480546;
double r480581 = r480516 * r480526;
double r480582 = r480513 * r480528;
double r480583 = r480581 - r480582;
double r480584 = r480551 * r480509;
double r480585 = r480553 * r480522;
double r480586 = r480584 - r480585;
double r480587 = r480583 * r480586;
double r480588 = r480580 + r480587;
double r480589 = r480588 - r480556;
double r480590 = r480589 + r480564;
double r480591 = r480547 + r480587;
double r480592 = cbrt(r480556);
double r480593 = r480592 * r480592;
double r480594 = r480593 * r480592;
double r480595 = r480591 - r480594;
double r480596 = r480595 + r480564;
double r480597 = r480567 ? r480590 : r480596;
double r480598 = r480511 ? r480565 : r480597;
return r480598;
}




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 | 26.8 |
|---|---|
| Target | 30.2 |
| Herbie | 28.3 |
if b < -3.278665181276975e-58Initial program 26.3
Taylor expanded around 0 32.6
if -3.278665181276975e-58 < b < 1.0555714521630219e-109Initial program 27.4
Taylor expanded around inf 27.7
if 1.0555714521630219e-109 < b Initial program 26.0
rmApplied add-cube-cbrt26.1
Final simplification28.3
herbie shell --seed 2019209
(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.2062562319964813e60) (- (- (* (- (* 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.3646035052463169e-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.7189631240574946e-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.77962681403791987e-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)))))