\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}\;y5 \le -6.22615300455259295 \cdot 10^{-308}:\\
\;\;\;\;\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(t \cdot y2 - y \cdot y3\right) \cdot \left(\sqrt[3]{y4 \cdot c - y5 \cdot a} \cdot \sqrt[3]{y4 \cdot c - y5 \cdot a}\right)\right) \cdot \sqrt[3]{y4 \cdot c - y5 \cdot a}\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)\\
\mathbf{elif}\;y5 \le 1.22216142288095444 \cdot 10^{-160}:\\
\;\;\;\;\left(\left(\left(\left(\left(t \cdot \left(i \cdot \left(z \cdot c\right)\right) - \mathsf{fma}\left(i, c \cdot \left(y \cdot x\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(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}\;y5 \le 1.5332229864222716 \cdot 10^{-27}:\\
\;\;\;\;\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(a \cdot \left(y3 \cdot \left(y1 \cdot z\right)\right) - \mathsf{fma}\left(y0, z \cdot \left(y3 \cdot c\right), a \cdot \left(x \cdot \left(y2 \cdot y1\right)\right)\right)\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{else}:\\
\;\;\;\;\left(\left(\left(\left(-\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)\\
\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 r687056 = x;
double r687057 = y;
double r687058 = r687056 * r687057;
double r687059 = z;
double r687060 = t;
double r687061 = r687059 * r687060;
double r687062 = r687058 - r687061;
double r687063 = a;
double r687064 = b;
double r687065 = r687063 * r687064;
double r687066 = c;
double r687067 = i;
double r687068 = r687066 * r687067;
double r687069 = r687065 - r687068;
double r687070 = r687062 * r687069;
double r687071 = j;
double r687072 = r687056 * r687071;
double r687073 = k;
double r687074 = r687059 * r687073;
double r687075 = r687072 - r687074;
double r687076 = y0;
double r687077 = r687076 * r687064;
double r687078 = y1;
double r687079 = r687078 * r687067;
double r687080 = r687077 - r687079;
double r687081 = r687075 * r687080;
double r687082 = r687070 - r687081;
double r687083 = y2;
double r687084 = r687056 * r687083;
double r687085 = y3;
double r687086 = r687059 * r687085;
double r687087 = r687084 - r687086;
double r687088 = r687076 * r687066;
double r687089 = r687078 * r687063;
double r687090 = r687088 - r687089;
double r687091 = r687087 * r687090;
double r687092 = r687082 + r687091;
double r687093 = r687060 * r687071;
double r687094 = r687057 * r687073;
double r687095 = r687093 - r687094;
double r687096 = y4;
double r687097 = r687096 * r687064;
double r687098 = y5;
double r687099 = r687098 * r687067;
double r687100 = r687097 - r687099;
double r687101 = r687095 * r687100;
double r687102 = r687092 + r687101;
double r687103 = r687060 * r687083;
double r687104 = r687057 * r687085;
double r687105 = r687103 - r687104;
double r687106 = r687096 * r687066;
double r687107 = r687098 * r687063;
double r687108 = r687106 - r687107;
double r687109 = r687105 * r687108;
double r687110 = r687102 - r687109;
double r687111 = r687073 * r687083;
double r687112 = r687071 * r687085;
double r687113 = r687111 - r687112;
double r687114 = r687096 * r687078;
double r687115 = r687098 * r687076;
double r687116 = r687114 - r687115;
double r687117 = r687113 * r687116;
double r687118 = r687110 + r687117;
return r687118;
}
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 r687119 = y5;
double r687120 = -6.226153004552593e-308;
bool r687121 = r687119 <= r687120;
double r687122 = x;
double r687123 = y;
double r687124 = r687122 * r687123;
double r687125 = z;
double r687126 = t;
double r687127 = r687125 * r687126;
double r687128 = r687124 - r687127;
double r687129 = a;
double r687130 = b;
double r687131 = r687129 * r687130;
double r687132 = c;
double r687133 = i;
double r687134 = r687132 * r687133;
double r687135 = r687131 - r687134;
double r687136 = r687128 * r687135;
double r687137 = j;
double r687138 = r687122 * r687137;
double r687139 = k;
double r687140 = r687125 * r687139;
double r687141 = r687138 - r687140;
double r687142 = y0;
double r687143 = r687142 * r687130;
double r687144 = y1;
double r687145 = r687144 * r687133;
double r687146 = r687143 - r687145;
double r687147 = r687141 * r687146;
double r687148 = r687136 - r687147;
double r687149 = y2;
double r687150 = r687122 * r687149;
double r687151 = y3;
double r687152 = r687125 * r687151;
double r687153 = r687150 - r687152;
double r687154 = r687142 * r687132;
double r687155 = r687144 * r687129;
double r687156 = r687154 - r687155;
double r687157 = r687153 * r687156;
double r687158 = r687148 + r687157;
double r687159 = r687126 * r687137;
double r687160 = r687123 * r687139;
double r687161 = r687159 - r687160;
double r687162 = y4;
double r687163 = r687162 * r687130;
double r687164 = r687119 * r687133;
double r687165 = r687163 - r687164;
double r687166 = r687161 * r687165;
double r687167 = r687158 + r687166;
double r687168 = r687126 * r687149;
double r687169 = r687123 * r687151;
double r687170 = r687168 - r687169;
double r687171 = r687162 * r687132;
double r687172 = r687119 * r687129;
double r687173 = r687171 - r687172;
double r687174 = cbrt(r687173);
double r687175 = r687174 * r687174;
double r687176 = r687170 * r687175;
double r687177 = r687176 * r687174;
double r687178 = r687167 - r687177;
double r687179 = r687139 * r687149;
double r687180 = r687137 * r687151;
double r687181 = r687179 - r687180;
double r687182 = r687162 * r687144;
double r687183 = r687119 * r687142;
double r687184 = r687182 - r687183;
double r687185 = r687181 * r687184;
double r687186 = r687178 + r687185;
double r687187 = 1.2221614228809544e-160;
bool r687188 = r687119 <= r687187;
double r687189 = r687125 * r687132;
double r687190 = r687133 * r687189;
double r687191 = r687126 * r687190;
double r687192 = r687123 * r687122;
double r687193 = r687132 * r687192;
double r687194 = r687125 * r687130;
double r687195 = r687126 * r687194;
double r687196 = r687129 * r687195;
double r687197 = fma(r687133, r687193, r687196);
double r687198 = r687191 - r687197;
double r687199 = r687198 - r687147;
double r687200 = r687199 + r687157;
double r687201 = r687200 + r687166;
double r687202 = r687170 * r687173;
double r687203 = r687201 - r687202;
double r687204 = r687203 + r687185;
double r687205 = 1.5332229864222716e-27;
bool r687206 = r687119 <= r687205;
double r687207 = r687144 * r687125;
double r687208 = r687151 * r687207;
double r687209 = r687129 * r687208;
double r687210 = r687151 * r687132;
double r687211 = r687125 * r687210;
double r687212 = r687149 * r687144;
double r687213 = r687122 * r687212;
double r687214 = r687129 * r687213;
double r687215 = fma(r687142, r687211, r687214);
double r687216 = r687209 - r687215;
double r687217 = r687148 + r687216;
double r687218 = r687217 + r687166;
double r687219 = r687218 - r687202;
double r687220 = r687219 + r687185;
double r687221 = -r687147;
double r687222 = r687221 + r687157;
double r687223 = r687222 + r687166;
double r687224 = r687223 - r687202;
double r687225 = r687224 + r687185;
double r687226 = r687206 ? r687220 : r687225;
double r687227 = r687188 ? r687204 : r687226;
double r687228 = r687121 ? r687186 : r687227;
return r687228;
}




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.8 |
|---|---|
| Target | 30.4 |
| Herbie | 28.0 |
if y5 < -6.226153004552593e-308Initial program 26.4
rmApplied add-cube-cbrt26.5
Applied associate-*r*26.5
if -6.226153004552593e-308 < y5 < 1.2221614228809544e-160Initial program 26.2
Taylor expanded around inf 28.8
Simplified28.8
if 1.2221614228809544e-160 < y5 < 1.5332229864222716e-27Initial program 26.7
Taylor expanded around inf 29.2
Simplified29.2
if 1.5332229864222716e-27 < y5 Initial program 28.4
Taylor expanded around 0 30.3
Final simplification28.0
herbie shell --seed 2020043 +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)))))