\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}\;z \le -1.389845984472355 \cdot 10^{-180} \lor \neg \left(z \le 7.2826596415879573 \cdot 10^{-47}\right):\\
\;\;\;\;\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(\left(\left(t \cdot y2 - y \cdot y3\right) \cdot y4\right) \cdot c + \left(y5 \cdot \left(y \cdot y3 - t \cdot y2\right)\right) \cdot a\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(\left(t \cdot \left(i \cdot \left(z \cdot c\right)\right) - \left(i \cdot \left(c \cdot \left(y \cdot x\right)\right) + a \cdot \left(t \cdot \left(z \cdot b\right)\right)\right)\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(\left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c\right) + \left(t \cdot y2 - y \cdot y3\right) \cdot \left(-y5 \cdot a\right)\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\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 r569070 = x;
double r569071 = y;
double r569072 = r569070 * r569071;
double r569073 = z;
double r569074 = t;
double r569075 = r569073 * r569074;
double r569076 = r569072 - r569075;
double r569077 = a;
double r569078 = b;
double r569079 = r569077 * r569078;
double r569080 = c;
double r569081 = i;
double r569082 = r569080 * r569081;
double r569083 = r569079 - r569082;
double r569084 = r569076 * r569083;
double r569085 = j;
double r569086 = r569070 * r569085;
double r569087 = k;
double r569088 = r569073 * r569087;
double r569089 = r569086 - r569088;
double r569090 = y0;
double r569091 = r569090 * r569078;
double r569092 = y1;
double r569093 = r569092 * r569081;
double r569094 = r569091 - r569093;
double r569095 = r569089 * r569094;
double r569096 = r569084 - r569095;
double r569097 = y2;
double r569098 = r569070 * r569097;
double r569099 = y3;
double r569100 = r569073 * r569099;
double r569101 = r569098 - r569100;
double r569102 = r569090 * r569080;
double r569103 = r569092 * r569077;
double r569104 = r569102 - r569103;
double r569105 = r569101 * r569104;
double r569106 = r569096 + r569105;
double r569107 = r569074 * r569085;
double r569108 = r569071 * r569087;
double r569109 = r569107 - r569108;
double r569110 = y4;
double r569111 = r569110 * r569078;
double r569112 = y5;
double r569113 = r569112 * r569081;
double r569114 = r569111 - r569113;
double r569115 = r569109 * r569114;
double r569116 = r569106 + r569115;
double r569117 = r569074 * r569097;
double r569118 = r569071 * r569099;
double r569119 = r569117 - r569118;
double r569120 = r569110 * r569080;
double r569121 = r569112 * r569077;
double r569122 = r569120 - r569121;
double r569123 = r569119 * r569122;
double r569124 = r569116 - r569123;
double r569125 = r569087 * r569097;
double r569126 = r569085 * r569099;
double r569127 = r569125 - r569126;
double r569128 = r569110 * r569092;
double r569129 = r569112 * r569090;
double r569130 = r569128 - r569129;
double r569131 = r569127 * r569130;
double r569132 = r569124 + r569131;
return r569132;
}
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 r569133 = z;
double r569134 = -1.389845984472355e-180;
bool r569135 = r569133 <= r569134;
double r569136 = 7.282659641587957e-47;
bool r569137 = r569133 <= r569136;
double r569138 = !r569137;
bool r569139 = r569135 || r569138;
double r569140 = x;
double r569141 = y;
double r569142 = r569140 * r569141;
double r569143 = t;
double r569144 = r569133 * r569143;
double r569145 = r569142 - r569144;
double r569146 = a;
double r569147 = b;
double r569148 = r569146 * r569147;
double r569149 = c;
double r569150 = i;
double r569151 = r569149 * r569150;
double r569152 = r569148 - r569151;
double r569153 = r569145 * r569152;
double r569154 = j;
double r569155 = r569140 * r569154;
double r569156 = k;
double r569157 = r569133 * r569156;
double r569158 = r569155 - r569157;
double r569159 = y0;
double r569160 = r569159 * r569147;
double r569161 = y1;
double r569162 = r569161 * r569150;
double r569163 = r569160 - r569162;
double r569164 = r569158 * r569163;
double r569165 = r569153 - r569164;
double r569166 = y2;
double r569167 = r569140 * r569166;
double r569168 = y3;
double r569169 = r569133 * r569168;
double r569170 = r569167 - r569169;
double r569171 = r569159 * r569149;
double r569172 = r569161 * r569146;
double r569173 = r569171 - r569172;
double r569174 = r569170 * r569173;
double r569175 = r569165 + r569174;
double r569176 = r569143 * r569154;
double r569177 = r569141 * r569156;
double r569178 = r569176 - r569177;
double r569179 = y4;
double r569180 = r569179 * r569147;
double r569181 = y5;
double r569182 = r569181 * r569150;
double r569183 = r569180 - r569182;
double r569184 = r569178 * r569183;
double r569185 = r569175 + r569184;
double r569186 = r569143 * r569166;
double r569187 = r569141 * r569168;
double r569188 = r569186 - r569187;
double r569189 = r569188 * r569179;
double r569190 = r569189 * r569149;
double r569191 = r569187 - r569186;
double r569192 = r569181 * r569191;
double r569193 = r569192 * r569146;
double r569194 = r569190 + r569193;
double r569195 = r569185 - r569194;
double r569196 = r569156 * r569166;
double r569197 = r569154 * r569168;
double r569198 = r569196 - r569197;
double r569199 = r569179 * r569161;
double r569200 = r569181 * r569159;
double r569201 = r569199 - r569200;
double r569202 = r569198 * r569201;
double r569203 = r569195 + r569202;
double r569204 = r569133 * r569149;
double r569205 = r569150 * r569204;
double r569206 = r569143 * r569205;
double r569207 = r569141 * r569140;
double r569208 = r569149 * r569207;
double r569209 = r569150 * r569208;
double r569210 = r569133 * r569147;
double r569211 = r569143 * r569210;
double r569212 = r569146 * r569211;
double r569213 = r569209 + r569212;
double r569214 = r569206 - r569213;
double r569215 = r569214 - r569164;
double r569216 = r569215 + r569174;
double r569217 = r569216 + r569184;
double r569218 = r569179 * r569149;
double r569219 = r569188 * r569218;
double r569220 = r569181 * r569146;
double r569221 = -r569220;
double r569222 = r569188 * r569221;
double r569223 = r569219 + r569222;
double r569224 = r569217 - r569223;
double r569225 = r569224 + r569202;
double r569226 = r569139 ? r569203 : r569225;
return r569226;
}




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
Results
| Original | 27.3 |
|---|---|
| Target | 31.1 |
| Herbie | 28.1 |
if z < -1.389845984472355e-180 or 7.282659641587957e-47 < z Initial program 27.8
rmApplied sub-neg27.8
Applied distribute-lft-in27.8
rmApplied associate-*r*28.3
Taylor expanded around inf 29.7
Simplified28.5
if -1.389845984472355e-180 < z < 7.282659641587957e-47Initial program 26.7
rmApplied sub-neg26.7
Applied distribute-lft-in26.7
Taylor expanded around inf 27.6
Final simplification28.1
herbie shell --seed 2020081
(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)))))