\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}\;y \le -5.790815325220392908858165475828676773669 \cdot 10^{105}:\\
\;\;\;\;\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(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{elif}\;y \le -1.53784447253032729710026066052934139026 \cdot 10^{-198}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + b \cdot \left(-i \cdot a\right)\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)\\
\mathbf{elif}\;y \le 4.328665951797104146389136561894216279411 \cdot 10^{-260}:\\
\;\;\;\;\left(\left(x \cdot \left(z \cdot y\right) + \left(-a \cdot \left(x \cdot t\right)\right)\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right) + \left(t \cdot \left(j \cdot c\right) + \left(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{elif}\;y \le 9.417727496660265300992831427606688521337 \cdot 10^{-4}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + b \cdot \left(-i \cdot a\right)\right)\right) + j \cdot \left(c \cdot t - i \cdot y\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(t \cdot \left(j \cdot c\right) + \left(-\left(\left(i \cdot j\right) \cdot \sqrt{y}\right) \cdot \sqrt{y}\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 r393577 = x;
double r393578 = y;
double r393579 = z;
double r393580 = r393578 * r393579;
double r393581 = t;
double r393582 = a;
double r393583 = r393581 * r393582;
double r393584 = r393580 - r393583;
double r393585 = r393577 * r393584;
double r393586 = b;
double r393587 = c;
double r393588 = r393587 * r393579;
double r393589 = i;
double r393590 = r393589 * r393582;
double r393591 = r393588 - r393590;
double r393592 = r393586 * r393591;
double r393593 = r393585 - r393592;
double r393594 = j;
double r393595 = r393587 * r393581;
double r393596 = r393589 * r393578;
double r393597 = r393595 - r393596;
double r393598 = r393594 * r393597;
double r393599 = r393593 + r393598;
return r393599;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r393600 = y;
double r393601 = -5.790815325220393e+105;
bool r393602 = r393600 <= r393601;
double r393603 = x;
double r393604 = z;
double r393605 = r393600 * r393604;
double r393606 = t;
double r393607 = a;
double r393608 = r393606 * r393607;
double r393609 = r393605 - r393608;
double r393610 = r393603 * r393609;
double r393611 = b;
double r393612 = c;
double r393613 = r393612 * r393604;
double r393614 = i;
double r393615 = r393614 * r393607;
double r393616 = r393613 - r393615;
double r393617 = r393611 * r393616;
double r393618 = r393610 - r393617;
double r393619 = j;
double r393620 = r393606 * r393619;
double r393621 = r393620 * r393612;
double r393622 = r393619 * r393600;
double r393623 = r393614 * r393622;
double r393624 = -r393623;
double r393625 = r393621 + r393624;
double r393626 = r393618 + r393625;
double r393627 = -1.5378444725303273e-198;
bool r393628 = r393600 <= r393627;
double r393629 = r393611 * r393612;
double r393630 = r393604 * r393629;
double r393631 = -r393615;
double r393632 = r393611 * r393631;
double r393633 = r393630 + r393632;
double r393634 = r393610 - r393633;
double r393635 = r393612 * r393606;
double r393636 = r393614 * r393600;
double r393637 = r393635 - r393636;
double r393638 = r393619 * r393637;
double r393639 = r393634 + r393638;
double r393640 = 4.328665951797104e-260;
bool r393641 = r393600 <= r393640;
double r393642 = r393604 * r393600;
double r393643 = r393603 * r393642;
double r393644 = r393603 * r393606;
double r393645 = r393607 * r393644;
double r393646 = -r393645;
double r393647 = r393643 + r393646;
double r393648 = r393647 - r393617;
double r393649 = r393619 * r393612;
double r393650 = r393606 * r393649;
double r393651 = r393650 + r393624;
double r393652 = r393648 + r393651;
double r393653 = 0.0009417727496660265;
bool r393654 = r393600 <= r393653;
double r393655 = r393614 * r393619;
double r393656 = sqrt(r393600);
double r393657 = r393655 * r393656;
double r393658 = r393657 * r393656;
double r393659 = -r393658;
double r393660 = r393650 + r393659;
double r393661 = r393618 + r393660;
double r393662 = r393654 ? r393639 : r393661;
double r393663 = r393641 ? r393652 : r393662;
double r393664 = r393628 ? r393639 : r393663;
double r393665 = r393602 ? r393626 : r393664;
return r393665;
}




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 | 12.1 |
|---|---|
| Target | 16.0 |
| Herbie | 11.2 |
if y < -5.790815325220393e+105Initial program 21.9
rmApplied sub-neg21.9
Applied distribute-lft-in21.9
Simplified21.6
Simplified20.9
rmApplied associate-*r*20.6
if -5.790815325220393e+105 < y < -1.5378444725303273e-198 or 4.328665951797104e-260 < y < 0.0009417727496660265Initial program 9.3
rmApplied sub-neg9.3
Applied distribute-lft-in9.3
Simplified8.9
if -1.5378444725303273e-198 < y < 4.328665951797104e-260Initial program 9.5
rmApplied sub-neg9.5
Applied distribute-lft-in9.5
Simplified10.0
Simplified9.9
rmApplied sub-neg9.9
Applied distribute-lft-in9.9
Simplified9.9
Simplified11.0
if 0.0009417727496660265 < y Initial program 16.5
rmApplied sub-neg16.5
Applied distribute-lft-in16.5
Simplified16.4
Simplified16.2
rmApplied associate-*r*12.2
rmApplied add-sqr-sqrt12.3
Applied associate-*r*12.3
Final simplification11.2
herbie shell --seed 2019326
(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)))))