\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}\;x \le -2.022243485415823 \cdot 10^{-191} \lor \neg \left(x \le 4.52441735268922567 \cdot 10^{-150}\right):\\
\;\;\;\;\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) - \left(b \cdot \left(c \cdot z - i \cdot a\right) + b \cdot \mathsf{fma}\left(-a, i, a \cdot i\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, 0 - \left(b \cdot \left(c \cdot z - i \cdot a\right) + b \cdot \mathsf{fma}\left(-a, i, a \cdot i\right)\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 r615392 = x;
double r615393 = y;
double r615394 = z;
double r615395 = r615393 * r615394;
double r615396 = t;
double r615397 = a;
double r615398 = r615396 * r615397;
double r615399 = r615395 - r615398;
double r615400 = r615392 * r615399;
double r615401 = b;
double r615402 = c;
double r615403 = r615402 * r615394;
double r615404 = i;
double r615405 = r615404 * r615397;
double r615406 = r615403 - r615405;
double r615407 = r615401 * r615406;
double r615408 = r615400 - r615407;
double r615409 = j;
double r615410 = r615402 * r615396;
double r615411 = r615404 * r615393;
double r615412 = r615410 - r615411;
double r615413 = r615409 * r615412;
double r615414 = r615408 + r615413;
return r615414;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r615415 = x;
double r615416 = -2.0222434854158232e-191;
bool r615417 = r615415 <= r615416;
double r615418 = 4.5244173526892257e-150;
bool r615419 = r615415 <= r615418;
double r615420 = !r615419;
bool r615421 = r615417 || r615420;
double r615422 = c;
double r615423 = t;
double r615424 = r615422 * r615423;
double r615425 = i;
double r615426 = y;
double r615427 = r615425 * r615426;
double r615428 = r615424 - r615427;
double r615429 = j;
double r615430 = z;
double r615431 = a;
double r615432 = r615431 * r615423;
double r615433 = -r615432;
double r615434 = fma(r615426, r615430, r615433);
double r615435 = r615415 * r615434;
double r615436 = -r615431;
double r615437 = fma(r615436, r615423, r615432);
double r615438 = r615415 * r615437;
double r615439 = r615435 + r615438;
double r615440 = b;
double r615441 = r615422 * r615430;
double r615442 = r615425 * r615431;
double r615443 = r615441 - r615442;
double r615444 = r615440 * r615443;
double r615445 = r615431 * r615425;
double r615446 = fma(r615436, r615425, r615445);
double r615447 = r615440 * r615446;
double r615448 = r615444 + r615447;
double r615449 = r615439 - r615448;
double r615450 = fma(r615428, r615429, r615449);
double r615451 = 0.0;
double r615452 = r615451 - r615448;
double r615453 = fma(r615428, r615429, r615452);
double r615454 = r615421 ? r615450 : r615453;
return r615454;
}




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.3 |
| Herbie | 12.2 |
if x < -2.0222434854158232e-191 or 4.5244173526892257e-150 < x Initial program 10.2
Simplified10.2
rmApplied prod-diff10.2
Applied distribute-lft-in10.2
Simplified10.2
rmApplied prod-diff10.2
Applied distribute-lft-in10.2
if -2.0222434854158232e-191 < x < 4.5244173526892257e-150Initial program 17.4
Simplified17.4
rmApplied prod-diff17.4
Applied distribute-lft-in17.4
Simplified17.4
Taylor expanded around 0 17.4
Final simplification12.2
herbie shell --seed 2020047 +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)))))