\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 r664304 = x;
double r664305 = y;
double r664306 = r664304 * r664305;
double r664307 = z;
double r664308 = t;
double r664309 = r664307 * r664308;
double r664310 = r664306 - r664309;
double r664311 = a;
double r664312 = b;
double r664313 = r664311 * r664312;
double r664314 = c;
double r664315 = i;
double r664316 = r664314 * r664315;
double r664317 = r664313 - r664316;
double r664318 = r664310 * r664317;
double r664319 = j;
double r664320 = r664304 * r664319;
double r664321 = k;
double r664322 = r664307 * r664321;
double r664323 = r664320 - r664322;
double r664324 = y0;
double r664325 = r664324 * r664312;
double r664326 = y1;
double r664327 = r664326 * r664315;
double r664328 = r664325 - r664327;
double r664329 = r664323 * r664328;
double r664330 = r664318 - r664329;
double r664331 = y2;
double r664332 = r664304 * r664331;
double r664333 = y3;
double r664334 = r664307 * r664333;
double r664335 = r664332 - r664334;
double r664336 = r664324 * r664314;
double r664337 = r664326 * r664311;
double r664338 = r664336 - r664337;
double r664339 = r664335 * r664338;
double r664340 = r664330 + r664339;
double r664341 = r664308 * r664319;
double r664342 = r664305 * r664321;
double r664343 = r664341 - r664342;
double r664344 = y4;
double r664345 = r664344 * r664312;
double r664346 = y5;
double r664347 = r664346 * r664315;
double r664348 = r664345 - r664347;
double r664349 = r664343 * r664348;
double r664350 = r664340 + r664349;
double r664351 = r664308 * r664331;
double r664352 = r664305 * r664333;
double r664353 = r664351 - r664352;
double r664354 = r664344 * r664314;
double r664355 = r664346 * r664311;
double r664356 = r664354 - r664355;
double r664357 = r664353 * r664356;
double r664358 = r664350 - r664357;
double r664359 = r664321 * r664331;
double r664360 = r664319 * r664333;
double r664361 = r664359 - r664360;
double r664362 = r664344 * r664326;
double r664363 = r664346 * r664324;
double r664364 = r664362 - r664363;
double r664365 = r664361 * r664364;
double r664366 = r664358 + r664365;
return r664366;
}
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 r664367 = y4;
double r664368 = -5.789471165304904e-241;
bool r664369 = r664367 <= r664368;
double r664370 = x;
double r664371 = y;
double r664372 = r664370 * r664371;
double r664373 = z;
double r664374 = t;
double r664375 = r664373 * r664374;
double r664376 = r664372 - r664375;
double r664377 = a;
double r664378 = b;
double r664379 = r664377 * r664378;
double r664380 = c;
double r664381 = i;
double r664382 = r664380 * r664381;
double r664383 = r664379 - r664382;
double r664384 = r664376 * r664383;
double r664385 = k;
double r664386 = y1;
double r664387 = r664373 * r664386;
double r664388 = r664381 * r664387;
double r664389 = r664385 * r664388;
double r664390 = j;
double r664391 = r664386 * r664370;
double r664392 = r664390 * r664391;
double r664393 = y0;
double r664394 = r664385 * r664378;
double r664395 = r664373 * r664394;
double r664396 = r664393 * r664395;
double r664397 = fma(r664381, r664392, r664396);
double r664398 = r664389 - r664397;
double r664399 = r664384 - r664398;
double r664400 = y2;
double r664401 = r664370 * r664400;
double r664402 = y3;
double r664403 = r664373 * r664402;
double r664404 = r664401 - r664403;
double r664405 = r664393 * r664380;
double r664406 = r664386 * r664377;
double r664407 = r664405 - r664406;
double r664408 = r664404 * r664407;
double r664409 = r664399 + r664408;
double r664410 = r664374 * r664390;
double r664411 = r664371 * r664385;
double r664412 = r664410 - r664411;
double r664413 = r664367 * r664378;
double r664414 = y5;
double r664415 = r664414 * r664381;
double r664416 = r664413 - r664415;
double r664417 = r664412 * r664416;
double r664418 = r664409 + r664417;
double r664419 = r664374 * r664400;
double r664420 = r664371 * r664402;
double r664421 = r664419 - r664420;
double r664422 = r664367 * r664380;
double r664423 = r664414 * r664377;
double r664424 = r664422 - r664423;
double r664425 = r664421 * r664424;
double r664426 = r664418 - r664425;
double r664427 = r664385 * r664400;
double r664428 = r664390 * r664402;
double r664429 = r664427 - r664428;
double r664430 = r664367 * r664386;
double r664431 = r664414 * r664393;
double r664432 = r664430 - r664431;
double r664433 = r664429 * r664432;
double r664434 = r664426 + r664433;
double r664435 = 6.725193475524307e-133;
bool r664436 = r664367 <= r664435;
double r664437 = r664370 * r664390;
double r664438 = r664373 * r664385;
double r664439 = r664437 - r664438;
double r664440 = r664393 * r664378;
double r664441 = r664386 * r664381;
double r664442 = r664440 - r664441;
double r664443 = r664439 * r664442;
double r664444 = r664384 - r664443;
double r664445 = r664444 + r664408;
double r664446 = r664371 * r664414;
double r664447 = r664381 * r664446;
double r664448 = r664385 * r664447;
double r664449 = r664390 * r664414;
double r664450 = r664381 * r664449;
double r664451 = r664371 * r664378;
double r664452 = r664367 * r664451;
double r664453 = r664385 * r664452;
double r664454 = fma(r664374, r664450, r664453);
double r664455 = r664448 - r664454;
double r664456 = r664445 + r664455;
double r664457 = r664456 - r664425;
double r664458 = r664457 + r664433;
double r664459 = 1.0410960937213773e-36;
bool r664460 = r664367 <= r664459;
double r664461 = r664445 + r664417;
double r664462 = r664461 - r664425;
double r664463 = r664402 * r664449;
double r664464 = r664385 * r664414;
double r664465 = r664400 * r664464;
double r664466 = r664463 - r664465;
double r664467 = r664393 * r664466;
double r664468 = r664390 * r664367;
double r664469 = r664402 * r664468;
double r664470 = r664386 * r664469;
double r664471 = r664467 - r664470;
double r664472 = r664462 + r664471;
double r664473 = r664444 + r664417;
double r664474 = r664473 - r664425;
double r664475 = r664433 + r664474;
double r664476 = r664460 ? r664472 : r664475;
double r664477 = r664436 ? r664458 : r664476;
double r664478 = r664369 ? r664434 : r664477;
return r664478;
}




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)))))