\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \cdot a\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)
\begin{array}{l}
\mathbf{if}\;y4 \le -5.78947116530490396 \cdot 10^{-241}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(k \cdot \left(i \cdot \left(z \cdot y1\right)\right) - \mathsf{fma}\left(i, j \cdot \left(y1 \cdot x\right), y0 \cdot \left(z \cdot \left(k \cdot b\right)\right)\right)\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \cdot a\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)\\
\mathbf{elif}\;y4 \le 6.7251934755243073 \cdot 10^{-133}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(k \cdot \left(i \cdot \left(y \cdot y5\right)\right) - \mathsf{fma}\left(t, i \cdot \left(j \cdot y5\right), k \cdot \left(y4 \cdot \left(y \cdot b\right)\right)\right)\right)\right) - \left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \cdot a\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)\\
\mathbf{elif}\;y4 \le 1.0410960937213773 \cdot 10^{-36}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \cdot a\right)\right) + \left(y0 \cdot \left(y3 \cdot \left(j \cdot y5\right) - y2 \cdot \left(k \cdot y5\right)\right) - y1 \cdot \left(y3 \cdot \left(j \cdot y4\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right) + \left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \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 k, double y0, double y1, double y2, double y3, double y4, double y5) {
double r610061 = x;
double r610062 = y;
double r610063 = r610061 * r610062;
double r610064 = z;
double r610065 = t;
double r610066 = r610064 * r610065;
double r610067 = r610063 - r610066;
double r610068 = a;
double r610069 = b;
double r610070 = r610068 * r610069;
double r610071 = c;
double r610072 = i;
double r610073 = r610071 * r610072;
double r610074 = r610070 - r610073;
double r610075 = r610067 * r610074;
double r610076 = j;
double r610077 = r610061 * r610076;
double r610078 = k;
double r610079 = r610064 * r610078;
double r610080 = r610077 - r610079;
double r610081 = y0;
double r610082 = r610081 * r610069;
double r610083 = y1;
double r610084 = r610083 * r610072;
double r610085 = r610082 - r610084;
double r610086 = r610080 * r610085;
double r610087 = r610075 - r610086;
double r610088 = y2;
double r610089 = r610061 * r610088;
double r610090 = y3;
double r610091 = r610064 * r610090;
double r610092 = r610089 - r610091;
double r610093 = r610081 * r610071;
double r610094 = r610083 * r610068;
double r610095 = r610093 - r610094;
double r610096 = r610092 * r610095;
double r610097 = r610087 + r610096;
double r610098 = r610065 * r610076;
double r610099 = r610062 * r610078;
double r610100 = r610098 - r610099;
double r610101 = y4;
double r610102 = r610101 * r610069;
double r610103 = y5;
double r610104 = r610103 * r610072;
double r610105 = r610102 - r610104;
double r610106 = r610100 * r610105;
double r610107 = r610097 + r610106;
double r610108 = r610065 * r610088;
double r610109 = r610062 * r610090;
double r610110 = r610108 - r610109;
double r610111 = r610101 * r610071;
double r610112 = r610103 * r610068;
double r610113 = r610111 - r610112;
double r610114 = r610110 * r610113;
double r610115 = r610107 - r610114;
double r610116 = r610078 * r610088;
double r610117 = r610076 * r610090;
double r610118 = r610116 - r610117;
double r610119 = r610101 * r610083;
double r610120 = r610103 * r610081;
double r610121 = r610119 - r610120;
double r610122 = r610118 * r610121;
double r610123 = r610115 + r610122;
return r610123;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k, double y0, double y1, double y2, double y3, double y4, double y5) {
double r610124 = y4;
double r610125 = -5.789471165304904e-241;
bool r610126 = r610124 <= r610125;
double r610127 = x;
double r610128 = y;
double r610129 = r610127 * r610128;
double r610130 = z;
double r610131 = t;
double r610132 = r610130 * r610131;
double r610133 = r610129 - r610132;
double r610134 = a;
double r610135 = b;
double r610136 = r610134 * r610135;
double r610137 = c;
double r610138 = i;
double r610139 = r610137 * r610138;
double r610140 = r610136 - r610139;
double r610141 = r610133 * r610140;
double r610142 = k;
double r610143 = y1;
double r610144 = r610130 * r610143;
double r610145 = r610138 * r610144;
double r610146 = r610142 * r610145;
double r610147 = j;
double r610148 = r610143 * r610127;
double r610149 = r610147 * r610148;
double r610150 = y0;
double r610151 = r610142 * r610135;
double r610152 = r610130 * r610151;
double r610153 = r610150 * r610152;
double r610154 = fma(r610138, r610149, r610153);
double r610155 = r610146 - r610154;
double r610156 = r610141 - r610155;
double r610157 = y2;
double r610158 = r610127 * r610157;
double r610159 = y3;
double r610160 = r610130 * r610159;
double r610161 = r610158 - r610160;
double r610162 = r610150 * r610137;
double r610163 = r610143 * r610134;
double r610164 = r610162 - r610163;
double r610165 = r610161 * r610164;
double r610166 = r610156 + r610165;
double r610167 = r610131 * r610147;
double r610168 = r610128 * r610142;
double r610169 = r610167 - r610168;
double r610170 = r610124 * r610135;
double r610171 = y5;
double r610172 = r610171 * r610138;
double r610173 = r610170 - r610172;
double r610174 = r610169 * r610173;
double r610175 = r610166 + r610174;
double r610176 = r610131 * r610157;
double r610177 = r610128 * r610159;
double r610178 = r610176 - r610177;
double r610179 = r610124 * r610137;
double r610180 = r610171 * r610134;
double r610181 = r610179 - r610180;
double r610182 = r610178 * r610181;
double r610183 = r610175 - r610182;
double r610184 = r610142 * r610157;
double r610185 = r610147 * r610159;
double r610186 = r610184 - r610185;
double r610187 = r610124 * r610143;
double r610188 = r610171 * r610150;
double r610189 = r610187 - r610188;
double r610190 = r610186 * r610189;
double r610191 = r610183 + r610190;
double r610192 = 6.725193475524307e-133;
bool r610193 = r610124 <= r610192;
double r610194 = r610127 * r610147;
double r610195 = r610130 * r610142;
double r610196 = r610194 - r610195;
double r610197 = r610150 * r610135;
double r610198 = r610143 * r610138;
double r610199 = r610197 - r610198;
double r610200 = r610196 * r610199;
double r610201 = r610141 - r610200;
double r610202 = r610201 + r610165;
double r610203 = r610128 * r610171;
double r610204 = r610138 * r610203;
double r610205 = r610142 * r610204;
double r610206 = r610147 * r610171;
double r610207 = r610138 * r610206;
double r610208 = r610128 * r610135;
double r610209 = r610124 * r610208;
double r610210 = r610142 * r610209;
double r610211 = fma(r610131, r610207, r610210);
double r610212 = r610205 - r610211;
double r610213 = r610202 + r610212;
double r610214 = r610213 - r610182;
double r610215 = r610214 + r610190;
double r610216 = 1.0410960937213773e-36;
bool r610217 = r610124 <= r610216;
double r610218 = r610202 + r610174;
double r610219 = r610218 - r610182;
double r610220 = r610159 * r610206;
double r610221 = r610142 * r610171;
double r610222 = r610157 * r610221;
double r610223 = r610220 - r610222;
double r610224 = r610150 * r610223;
double r610225 = r610147 * r610124;
double r610226 = r610159 * r610225;
double r610227 = r610143 * r610226;
double r610228 = r610224 - r610227;
double r610229 = r610219 + r610228;
double r610230 = r610201 + r610174;
double r610231 = r610230 - r610182;
double r610232 = r610190 + r610231;
double r610233 = r610217 ? r610229 : r610232;
double r610234 = r610193 ? r610215 : r610233;
double r610235 = r610126 ? r610191 : r610234;
return r610235;
}




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




Bits error versus k




Bits error versus y0




Bits error versus y1




Bits error versus y2




Bits error versus y3




Bits error versus y4




Bits error versus y5
| Original | 26.9 |
|---|---|
| Target | 30.5 |
| Herbie | 28.9 |
if y4 < -5.789471165304904e-241Initial program 26.8
Taylor expanded around inf 29.0
Simplified29.0
if -5.789471165304904e-241 < y4 < 6.725193475524307e-133Initial program 26.5
Taylor expanded around inf 27.9
Simplified27.9
if 6.725193475524307e-133 < y4 < 1.0410960937213773e-36Initial program 25.0
Taylor expanded around inf 27.5
Simplified27.5
if 1.0410960937213773e-36 < y4 Initial program 28.3
Taylor expanded around 0 30.9
Final simplification28.9
herbie shell --seed 2020047 +o rules:numerics
(FPCore (x y z t a b c i j k y0 y1 y2 y3 y4 y5)
:name "Linear.Matrix:det44 from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< y4 -7.206256231996481e+60) (- (- (* (- (* b a) (* i c)) (- (* y x) (* t z))) (- (* (- (* j x) (* k z)) (- (* y0 b) (* i y1))) (* (- (* j t) (* k y)) (- (* y4 b) (* y5 i))))) (- (/ (- (* y2 t) (* y3 y)) (/ 1 (- (* y4 c) (* y5 a)))) (* (- (* y2 k) (* y3 j)) (- (* y4 y1) (* y5 y0))))) (if (< y4 -3.364603505246317e-66) (+ (- (- (- (* (* t c) (* i z)) (* (* a t) (* b z))) (* (* y c) (* i x))) (* (- (* b y0) (* i y1)) (- (* j x) (* k z)))) (- (* (- (* y0 c) (* a y1)) (- (* x y2) (* z y3))) (- (* (- (* t y2) (* y y3)) (- (* y4 c) (* a y5))) (* (- (* y1 y4) (* y5 y0)) (- (* k y2) (* j y3)))))) (if (< y4 -1.2000065055686116e-105) (+ (+ (- (* (- (* j t) (* k y)) (- (* y4 b) (* y5 i))) (* (* y3 y) (- (* y5 a) (* y4 c)))) (+ (* (* y5 a) (* t y2)) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* x y2) (* z y3)) (- (* c y0) (* a y1))) (- (* (- (* b y0) (* i y1)) (- (* j x) (* k z))) (* (- (* y x) (* z t)) (- (* b a) (* i c)))))) (if (< y4 6.718963124057495e-279) (+ (- (- (- (* (* k y) (* y5 i)) (* (* y b) (* y4 k))) (* (* y5 t) (* i j))) (- (* (- (* y2 t) (* y3 y)) (- (* y4 c) (* y5 a))) (* (- (* y2 k) (* y3 j)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* b a) (* i c)) (- (* y x) (* t z))) (- (* (- (* j x) (* k z)) (- (* y0 b) (* i y1))) (* (- (* y2 x) (* y3 z)) (- (* c y0) (* y1 a)))))) (if (< y4 4.77962681403792e-222) (+ (+ (- (* (- (* j t) (* k y)) (- (* y4 b) (* y5 i))) (* (* y3 y) (- (* y5 a) (* y4 c)))) (+ (* (* y5 a) (* t y2)) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* x y2) (* z y3)) (- (* c y0) (* a y1))) (- (* (- (* b y0) (* i y1)) (- (* j x) (* k z))) (* (- (* y x) (* z t)) (- (* b a) (* i c)))))) (if (< y4 2.2852241541266835e-175) (+ (- (- (- (* (* k y) (* y5 i)) (* (* y b) (* y4 k))) (* (* y5 t) (* i j))) (- (* (- (* y2 t) (* y3 y)) (- (* y4 c) (* y5 a))) (* (- (* y2 k) (* y3 j)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* b a) (* i c)) (- (* y x) (* t z))) (- (* (- (* j x) (* k z)) (- (* y0 b) (* i y1))) (* (- (* y2 x) (* y3 z)) (- (* c y0) (* y1 a)))))) (+ (- (+ (+ (- (* (- (* x y) (* z t)) (- (* a b) (* c i))) (- (* k (* i (* z y1))) (+ (* j (* i (* x y1))) (* y0 (* k (* z b)))))) (- (* z (* y3 (* a y1))) (+ (* y2 (* x (* a y1))) (* y0 (* z (* c y3)))))) (* (- (* t j) (* y k)) (- (* y4 b) (* y5 i)))) (* (- (* t y2) (* y y3)) (- (* y4 c) (* y5 a)))) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0))))))))))
(+ (- (+ (+ (- (* (- (* x y) (* z t)) (- (* a b) (* c i))) (* (- (* x j) (* z k)) (- (* y0 b) (* y1 i)))) (* (- (* x y2) (* z y3)) (- (* y0 c) (* y1 a)))) (* (- (* t j) (* y k)) (- (* y4 b) (* y5 i)))) (* (- (* t y2) (* y y3)) (- (* y4 c) (* y5 a)))) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0)))))