\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)
\begin{array}{l}
\mathbf{if}\;j \le -1.624488299352208951075763961989130211651 \cdot 10^{-261} \lor \neg \left(j \le 4.542952957314723515911650362791300642265 \cdot 10^{-99}\right):\\
\;\;\;\;j \cdot \left(c \cdot a - y \cdot i\right) + \left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r575135 = x;
double r575136 = y;
double r575137 = z;
double r575138 = r575136 * r575137;
double r575139 = t;
double r575140 = a;
double r575141 = r575139 * r575140;
double r575142 = r575138 - r575141;
double r575143 = r575135 * r575142;
double r575144 = b;
double r575145 = c;
double r575146 = r575145 * r575137;
double r575147 = i;
double r575148 = r575139 * r575147;
double r575149 = r575146 - r575148;
double r575150 = r575144 * r575149;
double r575151 = r575143 - r575150;
double r575152 = j;
double r575153 = r575145 * r575140;
double r575154 = r575136 * r575147;
double r575155 = r575153 - r575154;
double r575156 = r575152 * r575155;
double r575157 = r575151 + r575156;
return r575157;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r575158 = j;
double r575159 = -1.624488299352209e-261;
bool r575160 = r575158 <= r575159;
double r575161 = 4.5429529573147235e-99;
bool r575162 = r575158 <= r575161;
double r575163 = !r575162;
bool r575164 = r575160 || r575163;
double r575165 = c;
double r575166 = a;
double r575167 = r575165 * r575166;
double r575168 = y;
double r575169 = i;
double r575170 = r575168 * r575169;
double r575171 = r575167 - r575170;
double r575172 = r575158 * r575171;
double r575173 = x;
double r575174 = z;
double r575175 = r575168 * r575174;
double r575176 = t;
double r575177 = r575176 * r575166;
double r575178 = r575175 - r575177;
double r575179 = r575173 * r575178;
double r575180 = b;
double r575181 = r575165 * r575174;
double r575182 = r575176 * r575169;
double r575183 = r575181 - r575182;
double r575184 = r575180 * r575183;
double r575185 = r575179 - r575184;
double r575186 = r575172 + r575185;
double r575187 = r575164 ? r575186 : r575185;
return r575187;
}




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.4 |
|---|---|
| Target | 20.6 |
| Herbie | 12.7 |
if j < -1.624488299352209e-261Initial program 12.2
rmApplied add-cube-cbrt12.5
Applied associate-*l*12.5
rmApplied sub-neg12.5
Applied distribute-lft-in12.5
Applied distribute-lft-in12.5
Simplified12.6
Simplified12.4
rmApplied associate-*r*12.1
if -1.624488299352209e-261 < j < 4.5429529573147235e-99Initial program 16.7
Taylor expanded around 0 17.7
if 4.5429529573147235e-99 < j Initial program 9.0
rmApplied add-cube-cbrt9.3
Final simplification12.7
herbie shell --seed 2019298
(FPCore (x y z t a b c i j)
:name "Data.Colour.Matrix:determinant from colour-2.3.3, A"
:precision binary64
:herbie-target
(if (< x -1.46969429677770502e-64) (+ (- (* x (- (* y z) (* t a))) (/ (* b (- (pow (* c z) 2) (pow (* t i) 2))) (+ (* c z) (* t i)))) (* j (- (* c a) (* y i)))) (if (< x 3.2113527362226803e-147) (- (* (- (* b i) (* x a)) t) (- (* z (* c b)) (* j (- (* c a) (* y i))))) (+ (- (* x (- (* y z) (* t a))) (/ (* b (- (pow (* c z) 2) (pow (* t i) 2))) (+ (* c z) (* t i)))) (* j (- (* c a) (* y i))))))
(+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* t i)))) (* j (- (* c a) (* y i)))))