\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)
\begin{array}{l}
\mathbf{if}\;c \le -1.911661663231193133152425417101608962071 \cdot 10^{-99}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right) + \left(\left(\left(\sqrt[3]{c} \cdot \sqrt[3]{c}\right) \cdot \left(t \cdot j\right)\right) \cdot \sqrt[3]{c} + \left(-i \cdot \left(y \cdot j\right)\right)\right)\\
\mathbf{elif}\;c \le 3.281737004707663056029424521453613958063 \cdot 10^{145}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(\sqrt[3]{b \cdot \left(c \cdot z - i \cdot a\right)} \cdot \sqrt[3]{b \cdot \left(c \cdot z - i \cdot a\right)}\right) \cdot \sqrt[3]{b \cdot \left(c \cdot z - i \cdot a\right)}\right) + j \cdot \left(c \cdot t - i \cdot y\right)\\
\mathbf{elif}\;c \le 2.662534141559160429989964984960950739743 \cdot 10^{222}:\\
\;\;\;\;\left(\left(t \cdot j\right) \cdot c + \left(-i \cdot \left(y \cdot j\right)\right)\right) + \left(-b \cdot \left(c \cdot z - i \cdot a\right)\right)\\
\mathbf{elif}\;c \le 4.731713770906781313248457864535070930729 \cdot 10^{243}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + \left(-i \cdot a\right) \cdot b\right)\right) + \left(t \cdot \left(j \cdot c\right) + \left(-i \cdot \left(y \cdot j\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right) + \left(\left(t \cdot j\right) \cdot c + \left(-\sqrt[3]{{\left(i \cdot \left(y \cdot j\right)\right)}^{3}}\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r458418 = x;
double r458419 = y;
double r458420 = z;
double r458421 = r458419 * r458420;
double r458422 = t;
double r458423 = a;
double r458424 = r458422 * r458423;
double r458425 = r458421 - r458424;
double r458426 = r458418 * r458425;
double r458427 = b;
double r458428 = c;
double r458429 = r458428 * r458420;
double r458430 = i;
double r458431 = r458430 * r458423;
double r458432 = r458429 - r458431;
double r458433 = r458427 * r458432;
double r458434 = r458426 - r458433;
double r458435 = j;
double r458436 = r458428 * r458422;
double r458437 = r458430 * r458419;
double r458438 = r458436 - r458437;
double r458439 = r458435 * r458438;
double r458440 = r458434 + r458439;
return r458440;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r458441 = c;
double r458442 = -1.911661663231193e-99;
bool r458443 = r458441 <= r458442;
double r458444 = x;
double r458445 = y;
double r458446 = z;
double r458447 = r458445 * r458446;
double r458448 = t;
double r458449 = a;
double r458450 = r458448 * r458449;
double r458451 = r458447 - r458450;
double r458452 = r458444 * r458451;
double r458453 = b;
double r458454 = r458441 * r458446;
double r458455 = i;
double r458456 = r458455 * r458449;
double r458457 = r458454 - r458456;
double r458458 = r458453 * r458457;
double r458459 = r458452 - r458458;
double r458460 = cbrt(r458441);
double r458461 = r458460 * r458460;
double r458462 = j;
double r458463 = r458448 * r458462;
double r458464 = r458461 * r458463;
double r458465 = r458464 * r458460;
double r458466 = r458445 * r458462;
double r458467 = r458455 * r458466;
double r458468 = -r458467;
double r458469 = r458465 + r458468;
double r458470 = r458459 + r458469;
double r458471 = 3.281737004707663e+145;
bool r458472 = r458441 <= r458471;
double r458473 = cbrt(r458458);
double r458474 = r458473 * r458473;
double r458475 = r458474 * r458473;
double r458476 = r458452 - r458475;
double r458477 = r458441 * r458448;
double r458478 = r458455 * r458445;
double r458479 = r458477 - r458478;
double r458480 = r458462 * r458479;
double r458481 = r458476 + r458480;
double r458482 = 2.6625341415591604e+222;
bool r458483 = r458441 <= r458482;
double r458484 = r458463 * r458441;
double r458485 = r458484 + r458468;
double r458486 = -r458458;
double r458487 = r458485 + r458486;
double r458488 = 4.731713770906781e+243;
bool r458489 = r458441 <= r458488;
double r458490 = r458453 * r458441;
double r458491 = r458446 * r458490;
double r458492 = -r458456;
double r458493 = r458492 * r458453;
double r458494 = r458491 + r458493;
double r458495 = r458452 - r458494;
double r458496 = r458462 * r458441;
double r458497 = r458448 * r458496;
double r458498 = r458497 + r458468;
double r458499 = r458495 + r458498;
double r458500 = 3.0;
double r458501 = pow(r458467, r458500);
double r458502 = cbrt(r458501);
double r458503 = -r458502;
double r458504 = r458484 + r458503;
double r458505 = r458459 + r458504;
double r458506 = r458489 ? r458499 : r458505;
double r458507 = r458483 ? r458487 : r458506;
double r458508 = r458472 ? r458481 : r458507;
double r458509 = r458443 ? r458470 : r458508;
return r458509;
}




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
Results
| Original | 11.6 |
|---|---|
| Target | 15.6 |
| Herbie | 11.3 |
if c < -1.911661663231193e-99Initial program 13.5
rmApplied sub-neg13.5
Applied distribute-lft-in13.5
Simplified13.9
rmApplied distribute-rgt-neg-out13.9
Simplified13.4
rmApplied associate-*r*11.8
rmApplied add-cube-cbrt12.0
Applied associate-*r*12.0
Simplified12.0
if -1.911661663231193e-99 < c < 3.281737004707663e+145Initial program 9.3
rmApplied add-cube-cbrt9.6
if 3.281737004707663e+145 < c < 2.6625341415591604e+222Initial program 21.8
rmApplied sub-neg21.8
Applied distribute-lft-in21.8
Simplified24.7
rmApplied distribute-rgt-neg-out24.7
Simplified22.8
rmApplied associate-*r*15.2
Taylor expanded around 0 23.6
if 2.6625341415591604e+222 < c < 4.731713770906781e+243Initial program 26.1
rmApplied sub-neg26.1
Applied distribute-lft-in26.1
Simplified22.1
rmApplied distribute-rgt-neg-out22.1
Simplified20.5
rmApplied sub-neg20.5
Applied distribute-lft-in20.5
Simplified18.8
Simplified18.8
if 4.731713770906781e+243 < c Initial program 21.6
rmApplied sub-neg21.6
Applied distribute-lft-in21.6
Simplified24.4
rmApplied distribute-rgt-neg-out24.4
Simplified22.3
rmApplied associate-*r*13.6
rmApplied add-cbrt-cube19.6
Applied add-cbrt-cube32.0
Applied cbrt-unprod32.5
Applied add-cbrt-cube40.1
Applied cbrt-unprod40.5
Simplified19.1
Final simplification11.3
herbie shell --seed 2019209 +o rules:numerics
(FPCore (x y z t a b c i j)
:name "Linear.Matrix:det33 from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< t -8.1209789191959122e-33) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j))) (if (< t -4.7125538182184851e-169) (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (/ (* j (- (pow (* c t) 2) (pow (* i y) 2))) (+ (* c t) (* i y)))) (if (< t -7.63353334603158369e-308) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j))) (if (< t 1.0535888557455487e-139) (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (/ (* j (- (pow (* c t) 2) (pow (* i y) 2))) (+ (* c t) (* i y)))) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j)))))))
(+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (* j (- (* c t) (* i y)))))