\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}\;z \le -3.2649420662695442 \cdot 10^{-224}:\\
\;\;\;\;\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(a \cdot \left(y3 \cdot \left(y1 \cdot z\right)\right) - \left(y0 \cdot \left(z \cdot \left(y3 \cdot c\right)\right) + a \cdot \left(x \cdot \left(y2 \cdot y1\right)\right)\right)\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}\;z \le 2.85563530538145874 \cdot 10^{-168}:\\
\;\;\;\;\left(\left(\left(\left(\left(t \cdot \left(i \cdot \left(z \cdot c\right)\right) - \left(i \cdot \left(c \cdot \left(y \cdot x\right)\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(\left(t \cdot j - y \cdot k\right) \cdot \left(\sqrt[3]{y4 \cdot b - y5 \cdot i} \cdot \sqrt[3]{y4 \cdot b - y5 \cdot i}\right)\right) \cdot \sqrt[3]{y4 \cdot b - y5 \cdot i}\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(\left(t \cdot y2 - y \cdot y3\right) \cdot \left(\sqrt[3]{y4 \cdot c - y5 \cdot a} \cdot \sqrt[3]{y4 \cdot c - y5 \cdot a}\right)\right) \cdot \sqrt[3]{y4 \cdot c - y5 \cdot a}\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 r579405 = x;
double r579406 = y;
double r579407 = r579405 * r579406;
double r579408 = z;
double r579409 = t;
double r579410 = r579408 * r579409;
double r579411 = r579407 - r579410;
double r579412 = a;
double r579413 = b;
double r579414 = r579412 * r579413;
double r579415 = c;
double r579416 = i;
double r579417 = r579415 * r579416;
double r579418 = r579414 - r579417;
double r579419 = r579411 * r579418;
double r579420 = j;
double r579421 = r579405 * r579420;
double r579422 = k;
double r579423 = r579408 * r579422;
double r579424 = r579421 - r579423;
double r579425 = y0;
double r579426 = r579425 * r579413;
double r579427 = y1;
double r579428 = r579427 * r579416;
double r579429 = r579426 - r579428;
double r579430 = r579424 * r579429;
double r579431 = r579419 - r579430;
double r579432 = y2;
double r579433 = r579405 * r579432;
double r579434 = y3;
double r579435 = r579408 * r579434;
double r579436 = r579433 - r579435;
double r579437 = r579425 * r579415;
double r579438 = r579427 * r579412;
double r579439 = r579437 - r579438;
double r579440 = r579436 * r579439;
double r579441 = r579431 + r579440;
double r579442 = r579409 * r579420;
double r579443 = r579406 * r579422;
double r579444 = r579442 - r579443;
double r579445 = y4;
double r579446 = r579445 * r579413;
double r579447 = y5;
double r579448 = r579447 * r579416;
double r579449 = r579446 - r579448;
double r579450 = r579444 * r579449;
double r579451 = r579441 + r579450;
double r579452 = r579409 * r579432;
double r579453 = r579406 * r579434;
double r579454 = r579452 - r579453;
double r579455 = r579445 * r579415;
double r579456 = r579447 * r579412;
double r579457 = r579455 - r579456;
double r579458 = r579454 * r579457;
double r579459 = r579451 - r579458;
double r579460 = r579422 * r579432;
double r579461 = r579420 * r579434;
double r579462 = r579460 - r579461;
double r579463 = r579445 * r579427;
double r579464 = r579447 * r579425;
double r579465 = r579463 - r579464;
double r579466 = r579462 * r579465;
double r579467 = r579459 + r579466;
return r579467;
}
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 r579468 = z;
double r579469 = -3.264942066269544e-224;
bool r579470 = r579468 <= r579469;
double r579471 = x;
double r579472 = y;
double r579473 = r579471 * r579472;
double r579474 = t;
double r579475 = r579468 * r579474;
double r579476 = r579473 - r579475;
double r579477 = a;
double r579478 = b;
double r579479 = r579477 * r579478;
double r579480 = c;
double r579481 = i;
double r579482 = r579480 * r579481;
double r579483 = r579479 - r579482;
double r579484 = r579476 * r579483;
double r579485 = j;
double r579486 = r579471 * r579485;
double r579487 = k;
double r579488 = r579468 * r579487;
double r579489 = r579486 - r579488;
double r579490 = y0;
double r579491 = r579490 * r579478;
double r579492 = y1;
double r579493 = r579492 * r579481;
double r579494 = r579491 - r579493;
double r579495 = r579489 * r579494;
double r579496 = r579484 - r579495;
double r579497 = y3;
double r579498 = r579492 * r579468;
double r579499 = r579497 * r579498;
double r579500 = r579477 * r579499;
double r579501 = r579497 * r579480;
double r579502 = r579468 * r579501;
double r579503 = r579490 * r579502;
double r579504 = y2;
double r579505 = r579504 * r579492;
double r579506 = r579471 * r579505;
double r579507 = r579477 * r579506;
double r579508 = r579503 + r579507;
double r579509 = r579500 - r579508;
double r579510 = r579496 + r579509;
double r579511 = r579474 * r579485;
double r579512 = r579472 * r579487;
double r579513 = r579511 - r579512;
double r579514 = y4;
double r579515 = r579514 * r579478;
double r579516 = y5;
double r579517 = r579516 * r579481;
double r579518 = r579515 - r579517;
double r579519 = r579513 * r579518;
double r579520 = r579510 + r579519;
double r579521 = r579474 * r579504;
double r579522 = r579472 * r579497;
double r579523 = r579521 - r579522;
double r579524 = r579514 * r579480;
double r579525 = r579516 * r579477;
double r579526 = r579524 - r579525;
double r579527 = r579523 * r579526;
double r579528 = r579520 - r579527;
double r579529 = r579487 * r579504;
double r579530 = r579485 * r579497;
double r579531 = r579529 - r579530;
double r579532 = r579514 * r579492;
double r579533 = r579516 * r579490;
double r579534 = r579532 - r579533;
double r579535 = r579531 * r579534;
double r579536 = r579528 + r579535;
double r579537 = 2.8556353053814587e-168;
bool r579538 = r579468 <= r579537;
double r579539 = r579468 * r579480;
double r579540 = r579481 * r579539;
double r579541 = r579474 * r579540;
double r579542 = r579472 * r579471;
double r579543 = r579480 * r579542;
double r579544 = r579481 * r579543;
double r579545 = r579468 * r579478;
double r579546 = r579474 * r579545;
double r579547 = r579477 * r579546;
double r579548 = r579544 + r579547;
double r579549 = r579541 - r579548;
double r579550 = r579549 - r579495;
double r579551 = r579471 * r579504;
double r579552 = r579468 * r579497;
double r579553 = r579551 - r579552;
double r579554 = r579490 * r579480;
double r579555 = r579492 * r579477;
double r579556 = r579554 - r579555;
double r579557 = r579553 * r579556;
double r579558 = r579550 + r579557;
double r579559 = cbrt(r579518);
double r579560 = r579559 * r579559;
double r579561 = r579513 * r579560;
double r579562 = r579561 * r579559;
double r579563 = r579558 + r579562;
double r579564 = r579563 - r579527;
double r579565 = r579564 + r579535;
double r579566 = r579496 + r579557;
double r579567 = r579566 + r579519;
double r579568 = cbrt(r579526);
double r579569 = r579568 * r579568;
double r579570 = r579523 * r579569;
double r579571 = r579570 * r579568;
double r579572 = r579567 - r579571;
double r579573 = r579572 + r579535;
double r579574 = r579538 ? r579565 : r579573;
double r579575 = r579470 ? r579536 : r579574;
return r579575;
}




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.1 |
|---|---|
| Target | 30.8 |
| Herbie | 28.5 |
if z < -3.264942066269544e-224Initial program 27.3
Taylor expanded around inf 30.3
if -3.264942066269544e-224 < z < 2.8556353053814587e-168Initial program 27.2
rmApplied add-cube-cbrt27.4
Applied associate-*r*27.4
Taylor expanded around inf 27.6
if 2.8556353053814587e-168 < z Initial program 26.9
rmApplied add-cube-cbrt26.9
Applied associate-*r*26.9
Final simplification28.5
herbie shell --seed 2020046
(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)))))