\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}
t_1 := t \cdot y2 - y \cdot y3\\
t_2 := t_1 \cdot \left(c \cdot y4 - a \cdot y5\right)\\
t_3 := \left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right)\\
t_4 := \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y1 \cdot y4 - y0 \cdot y5\right)\\
t_5 := t \cdot j - y \cdot k\\
t_6 := y4 \cdot \left(b \cdot t_5\right) - i \cdot \left(t_5 \cdot y5\right)\\
t_7 := x \cdot j - z \cdot k\\
t_8 := x \cdot y2 - z \cdot y3\\
t_9 := \left(\left(\left(\left(t_3 - t_7 \cdot \left(b \cdot y0 - i \cdot y1\right)\right) + t_8 \cdot \left(c \cdot y0 - a \cdot y1\right)\right) + t_5 \cdot \left(b \cdot y4 - i \cdot y5\right)\right) - t_2\right) + t_4\\
t_10 := c \cdot \left(y0 \cdot t_8\right) - y1 \cdot \left(a \cdot t_8\right)\\
t_11 := y0 \cdot \left(b \cdot t_7\right) - y1 \cdot \left(i \cdot t_7\right)\\
\mathbf{if}\;t_9 \leq -\infty:\\
\;\;\;\;t_4 + \left(\left(\left(\left(\left(\left(c \cdot \left(\left(z \cdot t\right) \cdot i\right) + a \cdot \left(y \cdot \left(x \cdot b\right)\right)\right) - \left(a \cdot \left(t \cdot \left(z \cdot b\right)\right) + c \cdot \left(y \cdot \left(x \cdot i\right)\right)\right)\right) - t_11\right) + t_10\right) + t_6\right) - t_2\right)\\
\mathbf{elif}\;t_9 \leq 3.896155088058879 \cdot 10^{+306}:\\
\;\;\;\;t_9\\
\mathbf{else}:\\
\;\;\;\;t_4 + \left(\left(t_6 + \left(t_10 + \left(t_3 - t_11\right)\right)\right) - c \cdot \left(y4 \cdot t_1\right)\right)\\
\end{array}
(FPCore (x y z t a b c i j k y0 y1 y2 y3 y4 y5)
:precision binary64
(+
(-
(+
(+
(-
(* (- (* 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)))))(FPCore (x y z t a b c i j k y0 y1 y2 y3 y4 y5)
:precision binary64
(let* ((t_1 (- (* t y2) (* y y3)))
(t_2 (* t_1 (- (* c y4) (* a y5))))
(t_3 (* (- (* x y) (* z t)) (- (* a b) (* c i))))
(t_4 (* (- (* k y2) (* j y3)) (- (* y1 y4) (* y0 y5))))
(t_5 (- (* t j) (* y k)))
(t_6 (- (* y4 (* b t_5)) (* i (* t_5 y5))))
(t_7 (- (* x j) (* z k)))
(t_8 (- (* x y2) (* z y3)))
(t_9
(+
(-
(+
(+
(- t_3 (* t_7 (- (* b y0) (* i y1))))
(* t_8 (- (* c y0) (* a y1))))
(* t_5 (- (* b y4) (* i y5))))
t_2)
t_4))
(t_10 (- (* c (* y0 t_8)) (* y1 (* a t_8))))
(t_11 (- (* y0 (* b t_7)) (* y1 (* i t_7)))))
(if (<= t_9 (- INFINITY))
(+
t_4
(-
(+
(+
(-
(-
(+ (* c (* (* z t) i)) (* a (* y (* x b))))
(+ (* a (* t (* z b))) (* c (* y (* x i)))))
t_11)
t_10)
t_6)
t_2))
(if (<= t_9 3.896155088058879e+306)
t_9
(+ t_4 (- (+ t_6 (+ t_10 (- t_3 t_11))) (* c (* y4 t_1))))))))double code(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) {
return (((((((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)));
}
double code(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 t_1 = (t * y2) - (y * y3);
double t_2 = t_1 * ((c * y4) - (a * y5));
double t_3 = ((x * y) - (z * t)) * ((a * b) - (c * i));
double t_4 = ((k * y2) - (j * y3)) * ((y1 * y4) - (y0 * y5));
double t_5 = (t * j) - (y * k);
double t_6 = (y4 * (b * t_5)) - (i * (t_5 * y5));
double t_7 = (x * j) - (z * k);
double t_8 = (x * y2) - (z * y3);
double t_9 = ((((t_3 - (t_7 * ((b * y0) - (i * y1)))) + (t_8 * ((c * y0) - (a * y1)))) + (t_5 * ((b * y4) - (i * y5)))) - t_2) + t_4;
double t_10 = (c * (y0 * t_8)) - (y1 * (a * t_8));
double t_11 = (y0 * (b * t_7)) - (y1 * (i * t_7));
double tmp;
if (t_9 <= -((double) INFINITY)) {
tmp = t_4 + (((((((c * ((z * t) * i)) + (a * (y * (x * b)))) - ((a * (t * (z * b))) + (c * (y * (x * i))))) - t_11) + t_10) + t_6) - t_2);
} else if (t_9 <= 3.896155088058879e+306) {
tmp = t_9;
} else {
tmp = t_4 + ((t_6 + (t_10 + (t_3 - t_11))) - (c * (y4 * t_1)));
}
return tmp;
}




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.6 |
|---|---|
| Target | 31.0 |
| Herbie | 22.1 |
if (+.f64 (-.f64 (+.f64 (+.f64 (-.f64 (*.f64 (-.f64 (*.f64 x y) (*.f64 z t)) (-.f64 (*.f64 a b) (*.f64 c i))) (*.f64 (-.f64 (*.f64 x j) (*.f64 z k)) (-.f64 (*.f64 y0 b) (*.f64 y1 i)))) (*.f64 (-.f64 (*.f64 x y2) (*.f64 z y3)) (-.f64 (*.f64 y0 c) (*.f64 y1 a)))) (*.f64 (-.f64 (*.f64 t j) (*.f64 y k)) (-.f64 (*.f64 y4 b) (*.f64 y5 i)))) (*.f64 (-.f64 (*.f64 t y2) (*.f64 y y3)) (-.f64 (*.f64 y4 c) (*.f64 y5 a)))) (*.f64 (-.f64 (*.f64 k y2) (*.f64 j y3)) (-.f64 (*.f64 y4 y1) (*.f64 y5 y0)))) < -inf.0Initial program 64.0
rmApplied sub-neg_binary6464.0
Applied distribute-rgt-in_binary6464.0
Simplified62.2
Simplified59.7
rmApplied sub-neg_binary6459.7
Applied distribute-rgt-in_binary6459.7
Simplified57.5
Simplified55.5
rmApplied sub-neg_binary6455.5
Applied distribute-rgt-in_binary6455.5
Simplified54.2
Simplified51.6
Taylor expanded around inf 47.8
if -inf.0 < (+.f64 (-.f64 (+.f64 (+.f64 (-.f64 (*.f64 (-.f64 (*.f64 x y) (*.f64 z t)) (-.f64 (*.f64 a b) (*.f64 c i))) (*.f64 (-.f64 (*.f64 x j) (*.f64 z k)) (-.f64 (*.f64 y0 b) (*.f64 y1 i)))) (*.f64 (-.f64 (*.f64 x y2) (*.f64 z y3)) (-.f64 (*.f64 y0 c) (*.f64 y1 a)))) (*.f64 (-.f64 (*.f64 t j) (*.f64 y k)) (-.f64 (*.f64 y4 b) (*.f64 y5 i)))) (*.f64 (-.f64 (*.f64 t y2) (*.f64 y y3)) (-.f64 (*.f64 y4 c) (*.f64 y5 a)))) (*.f64 (-.f64 (*.f64 k y2) (*.f64 j y3)) (-.f64 (*.f64 y4 y1) (*.f64 y5 y0)))) < 3.89615508805887915e306Initial program 0.8
rmApplied *-commutative_binary640.8
if 3.89615508805887915e306 < (+.f64 (-.f64 (+.f64 (+.f64 (-.f64 (*.f64 (-.f64 (*.f64 x y) (*.f64 z t)) (-.f64 (*.f64 a b) (*.f64 c i))) (*.f64 (-.f64 (*.f64 x j) (*.f64 z k)) (-.f64 (*.f64 y0 b) (*.f64 y1 i)))) (*.f64 (-.f64 (*.f64 x y2) (*.f64 z y3)) (-.f64 (*.f64 y0 c) (*.f64 y1 a)))) (*.f64 (-.f64 (*.f64 t j) (*.f64 y k)) (-.f64 (*.f64 y4 b) (*.f64 y5 i)))) (*.f64 (-.f64 (*.f64 t y2) (*.f64 y y3)) (-.f64 (*.f64 y4 c) (*.f64 y5 a)))) (*.f64 (-.f64 (*.f64 k y2) (*.f64 j y3)) (-.f64 (*.f64 y4 y1) (*.f64 y5 y0)))) Initial program 63.6
rmApplied sub-neg_binary6463.6
Applied distribute-rgt-in_binary6463.6
Simplified62.1
Simplified60.5
rmApplied sub-neg_binary6460.5
Applied distribute-rgt-in_binary6460.5
Simplified59.3
Simplified57.6
rmApplied sub-neg_binary6457.6
Applied distribute-rgt-in_binary6457.6
Simplified56.5
Simplified54.2
Taylor expanded around inf 52.3
Simplified52.3
Final simplification22.1
herbie shell --seed 2021204
(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.0 (- (* 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)))))