\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}\;b \le -3.6945330208330025 \cdot 10^{-225}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, \left(\left(x \cdot y\right) \cdot z + x \cdot \left(-t \cdot a\right)\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right)\\
\mathbf{elif}\;b \le 7.3546411059421409 \cdot 10^{-196}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, \left(x \cdot \left(y \cdot z\right) + x \cdot \left(-t \cdot a\right)\right) - 0\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, \left(x \cdot \mathsf{fma}\left(y, z, -a \cdot t\right) + x \cdot \mathsf{fma}\left(-a, t, a \cdot t\right)\right) - b \cdot \left(c \cdot z - i \cdot a\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 r561447 = x;
double r561448 = y;
double r561449 = z;
double r561450 = r561448 * r561449;
double r561451 = t;
double r561452 = a;
double r561453 = r561451 * r561452;
double r561454 = r561450 - r561453;
double r561455 = r561447 * r561454;
double r561456 = b;
double r561457 = c;
double r561458 = r561457 * r561449;
double r561459 = i;
double r561460 = r561459 * r561452;
double r561461 = r561458 - r561460;
double r561462 = r561456 * r561461;
double r561463 = r561455 - r561462;
double r561464 = j;
double r561465 = r561457 * r561451;
double r561466 = r561459 * r561448;
double r561467 = r561465 - r561466;
double r561468 = r561464 * r561467;
double r561469 = r561463 + r561468;
return r561469;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r561470 = b;
double r561471 = -3.6945330208330025e-225;
bool r561472 = r561470 <= r561471;
double r561473 = c;
double r561474 = t;
double r561475 = r561473 * r561474;
double r561476 = i;
double r561477 = y;
double r561478 = r561476 * r561477;
double r561479 = r561475 - r561478;
double r561480 = j;
double r561481 = x;
double r561482 = r561481 * r561477;
double r561483 = z;
double r561484 = r561482 * r561483;
double r561485 = a;
double r561486 = r561474 * r561485;
double r561487 = -r561486;
double r561488 = r561481 * r561487;
double r561489 = r561484 + r561488;
double r561490 = r561473 * r561483;
double r561491 = r561476 * r561485;
double r561492 = r561490 - r561491;
double r561493 = r561470 * r561492;
double r561494 = r561489 - r561493;
double r561495 = fma(r561479, r561480, r561494);
double r561496 = 7.354641105942141e-196;
bool r561497 = r561470 <= r561496;
double r561498 = r561477 * r561483;
double r561499 = r561481 * r561498;
double r561500 = r561499 + r561488;
double r561501 = 0.0;
double r561502 = r561500 - r561501;
double r561503 = fma(r561479, r561480, r561502);
double r561504 = r561485 * r561474;
double r561505 = -r561504;
double r561506 = fma(r561477, r561483, r561505);
double r561507 = r561481 * r561506;
double r561508 = -r561485;
double r561509 = fma(r561508, r561474, r561504);
double r561510 = r561481 * r561509;
double r561511 = r561507 + r561510;
double r561512 = r561511 - r561493;
double r561513 = fma(r561479, r561480, r561512);
double r561514 = r561497 ? r561503 : r561513;
double r561515 = r561472 ? r561495 : r561514;
return r561515;
}




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
| Original | 12.3 |
|---|---|
| Target | 16.1 |
| Herbie | 12.1 |
if b < -3.6945330208330025e-225Initial program 10.9
Simplified10.9
rmApplied sub-neg10.9
Applied distribute-lft-in10.9
rmApplied associate-*r*10.9
if -3.6945330208330025e-225 < b < 7.354641105942141e-196Initial program 18.1
Simplified18.1
rmApplied sub-neg18.1
Applied distribute-lft-in18.1
Taylor expanded around 0 17.3
if 7.354641105942141e-196 < b Initial program 10.8
Simplified10.7
rmApplied prod-diff10.7
Applied distribute-lft-in10.7
Final simplification12.1
herbie shell --seed 2020033 +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.120978919195912e-33) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j))) (if (< t -4.712553818218485e-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.633533346031584e-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)))))