\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}\;j \le -9.929536798422278605563067575704178711758 \cdot 10^{96}:\\
\;\;\;\;j \cdot \left(c \cdot t - i \cdot y\right) + \left(-b \cdot \left(c \cdot z - i \cdot a\right)\right)\\
\mathbf{elif}\;j \le -1.098607656333811782069347702956620830271 \cdot 10^{-146}:\\
\;\;\;\;\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(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{elif}\;j \le -6.651508483195953646948775651706394971033 \cdot 10^{-258}:\\
\;\;\;\;\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(c \cdot \left(t \cdot j\right) + \left(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{elif}\;j \le 2.649066615389731199752472489106042554466 \cdot 10^{253}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(b \cdot \left(\sqrt[3]{c \cdot z - i \cdot a} \cdot \sqrt[3]{c \cdot z - i \cdot a}\right)\right) \cdot \sqrt[3]{c \cdot z - i \cdot a}\right) + \left(c \cdot \left(t \cdot j\right) + \left(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;j \cdot \left(c \cdot t - i \cdot y\right) + \left(-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 r377003 = x;
double r377004 = y;
double r377005 = z;
double r377006 = r377004 * r377005;
double r377007 = t;
double r377008 = a;
double r377009 = r377007 * r377008;
double r377010 = r377006 - r377009;
double r377011 = r377003 * r377010;
double r377012 = b;
double r377013 = c;
double r377014 = r377013 * r377005;
double r377015 = i;
double r377016 = r377015 * r377008;
double r377017 = r377014 - r377016;
double r377018 = r377012 * r377017;
double r377019 = r377011 - r377018;
double r377020 = j;
double r377021 = r377013 * r377007;
double r377022 = r377015 * r377004;
double r377023 = r377021 - r377022;
double r377024 = r377020 * r377023;
double r377025 = r377019 + r377024;
return r377025;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r377026 = j;
double r377027 = -9.929536798422279e+96;
bool r377028 = r377026 <= r377027;
double r377029 = c;
double r377030 = t;
double r377031 = r377029 * r377030;
double r377032 = i;
double r377033 = y;
double r377034 = r377032 * r377033;
double r377035 = r377031 - r377034;
double r377036 = r377026 * r377035;
double r377037 = b;
double r377038 = z;
double r377039 = r377029 * r377038;
double r377040 = a;
double r377041 = r377032 * r377040;
double r377042 = r377039 - r377041;
double r377043 = r377037 * r377042;
double r377044 = -r377043;
double r377045 = r377036 + r377044;
double r377046 = -1.0986076563338118e-146;
bool r377047 = r377026 <= r377046;
double r377048 = x;
double r377049 = r377033 * r377038;
double r377050 = r377030 * r377040;
double r377051 = r377049 - r377050;
double r377052 = r377048 * r377051;
double r377053 = r377052 - r377043;
double r377054 = r377026 * r377029;
double r377055 = r377030 * r377054;
double r377056 = r377026 * r377033;
double r377057 = r377032 * r377056;
double r377058 = -r377057;
double r377059 = r377055 + r377058;
double r377060 = r377053 + r377059;
double r377061 = -6.651508483195954e-258;
bool r377062 = r377026 <= r377061;
double r377063 = r377037 * r377029;
double r377064 = r377038 * r377063;
double r377065 = -r377041;
double r377066 = r377065 * r377037;
double r377067 = r377064 + r377066;
double r377068 = r377052 - r377067;
double r377069 = r377030 * r377026;
double r377070 = r377029 * r377069;
double r377071 = r377070 + r377058;
double r377072 = r377068 + r377071;
double r377073 = 2.6490666153897312e+253;
bool r377074 = r377026 <= r377073;
double r377075 = cbrt(r377042);
double r377076 = r377075 * r377075;
double r377077 = r377037 * r377076;
double r377078 = r377077 * r377075;
double r377079 = r377052 - r377078;
double r377080 = r377079 + r377071;
double r377081 = r377074 ? r377080 : r377045;
double r377082 = r377062 ? r377072 : r377081;
double r377083 = r377047 ? r377060 : r377082;
double r377084 = r377028 ? r377045 : r377083;
return r377084;
}




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.2 |
|---|---|
| Target | 16.1 |
| Herbie | 11.8 |
if j < -9.929536798422279e+96 or 2.6490666153897312e+253 < j Initial program 7.3
Taylor expanded around 0 15.8
if -9.929536798422279e+96 < j < -1.0986076563338118e-146Initial program 11.3
rmApplied sub-neg11.3
Applied distribute-lft-in11.3
Simplified11.3
Simplified10.4
Taylor expanded around inf 9.1
if -1.0986076563338118e-146 < j < -6.651508483195954e-258Initial program 17.1
rmApplied sub-neg17.1
Applied distribute-lft-in17.1
Simplified17.1
Simplified14.0
rmApplied associate-*l*10.9
rmApplied sub-neg10.9
Applied distribute-lft-in10.9
Simplified11.5
Simplified11.5
if -6.651508483195954e-258 < j < 2.6490666153897312e+253Initial program 12.9
rmApplied sub-neg12.9
Applied distribute-lft-in12.9
Simplified12.9
Simplified12.4
rmApplied associate-*l*11.6
rmApplied add-cube-cbrt11.9
Applied associate-*r*11.9
Final simplification11.8
herbie shell --seed 2019325
(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)))))