\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k
\begin{array}{l}
\mathbf{if}\;t \le -9.206800721396283745070197539175102484788 \cdot 10^{-173}:\\
\;\;\;\;\left(\left(\left(z \cdot 18\right) \cdot x\right) \cdot y - a \cdot 4\right) \cdot t - \left(\left(j \cdot k\right) \cdot 27 + \left(\left(x \cdot i\right) \cdot 4 - c \cdot b\right)\right)\\
\mathbf{elif}\;t \le 3.139097384817554521245580418208289195104 \cdot 10^{-115}:\\
\;\;\;\;\left(-t\right) \cdot \left(a \cdot 4\right) - \left(\left(j \cdot k\right) \cdot 27 + \left(\left(x \cdot i\right) \cdot 4 - c \cdot b\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(z \cdot 18\right) \cdot x\right) \cdot y - a \cdot 4\right) \cdot t - \left(\left(j \cdot k\right) \cdot 27 + \left(\left(x \cdot i\right) \cdot 4 - c \cdot b\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 r36759448 = x;
double r36759449 = 18.0;
double r36759450 = r36759448 * r36759449;
double r36759451 = y;
double r36759452 = r36759450 * r36759451;
double r36759453 = z;
double r36759454 = r36759452 * r36759453;
double r36759455 = t;
double r36759456 = r36759454 * r36759455;
double r36759457 = a;
double r36759458 = 4.0;
double r36759459 = r36759457 * r36759458;
double r36759460 = r36759459 * r36759455;
double r36759461 = r36759456 - r36759460;
double r36759462 = b;
double r36759463 = c;
double r36759464 = r36759462 * r36759463;
double r36759465 = r36759461 + r36759464;
double r36759466 = r36759448 * r36759458;
double r36759467 = i;
double r36759468 = r36759466 * r36759467;
double r36759469 = r36759465 - r36759468;
double r36759470 = j;
double r36759471 = 27.0;
double r36759472 = r36759470 * r36759471;
double r36759473 = k;
double r36759474 = r36759472 * r36759473;
double r36759475 = r36759469 - r36759474;
return r36759475;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r36759476 = t;
double r36759477 = -9.206800721396284e-173;
bool r36759478 = r36759476 <= r36759477;
double r36759479 = z;
double r36759480 = 18.0;
double r36759481 = r36759479 * r36759480;
double r36759482 = x;
double r36759483 = r36759481 * r36759482;
double r36759484 = y;
double r36759485 = r36759483 * r36759484;
double r36759486 = a;
double r36759487 = 4.0;
double r36759488 = r36759486 * r36759487;
double r36759489 = r36759485 - r36759488;
double r36759490 = r36759489 * r36759476;
double r36759491 = j;
double r36759492 = k;
double r36759493 = r36759491 * r36759492;
double r36759494 = 27.0;
double r36759495 = r36759493 * r36759494;
double r36759496 = i;
double r36759497 = r36759482 * r36759496;
double r36759498 = r36759497 * r36759487;
double r36759499 = c;
double r36759500 = b;
double r36759501 = r36759499 * r36759500;
double r36759502 = r36759498 - r36759501;
double r36759503 = r36759495 + r36759502;
double r36759504 = r36759490 - r36759503;
double r36759505 = 3.1390973848175545e-115;
bool r36759506 = r36759476 <= r36759505;
double r36759507 = -r36759476;
double r36759508 = r36759507 * r36759488;
double r36759509 = r36759508 - r36759503;
double r36759510 = r36759506 ? r36759509 : r36759504;
double r36759511 = r36759478 ? r36759504 : r36759510;
return r36759511;
}




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
Results
| Original | 5.6 |
|---|---|
| Target | 1.7 |
| Herbie | 4.5 |
if t < -9.206800721396284e-173 or 3.1390973848175545e-115 < t Initial program 3.8
Simplified3.9
Taylor expanded around 0 3.8
if -9.206800721396284e-173 < t < 3.1390973848175545e-115Initial program 9.0
Simplified9.4
Taylor expanded around 0 9.3
Taylor expanded around 0 5.9
Final simplification4.5
herbie shell --seed 2019192
(FPCore (x y z t a b c i j k)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, E"
:herbie-target
(if (< t -1.6210815397541398e-69) (- (- (* (* 18.0 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4.0)) (- (* (* k j) 27.0) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18.0 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4.0)) (- (* c b) (* 27.0 (* k j)))) (- (- (* (* 18.0 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4.0)) (- (* (* k j) 27.0) (* c b)))))
(- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)))