\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 -4.05720677656797186 \cdot 10^{-131}:\\
\;\;\;\;t \cdot \left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4\right) + \left(b \cdot c - \left(\left(x \cdot 4\right) \cdot i + j \cdot \left(27 \cdot k\right)\right)\right)\\
\mathbf{elif}\;t \le 5.71695176928990877 \cdot 10^{-142}:\\
\;\;\;\;t \cdot \left(-4 \cdot a\right) + \left(b \cdot c - \left(\left(x \cdot 4\right) \cdot i + \left(j \cdot 27\right) \cdot k\right)\right)\\
\mathbf{else}:\\
\;\;\;\;t \cdot \left(\left(x \cdot 18\right) \cdot \left(y \cdot z\right) - a \cdot 4\right) + \left(b \cdot c - \left(\left(x \cdot 4\right) \cdot i + \left(j \cdot 27\right) \cdot k\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 r798507 = x;
double r798508 = 18.0;
double r798509 = r798507 * r798508;
double r798510 = y;
double r798511 = r798509 * r798510;
double r798512 = z;
double r798513 = r798511 * r798512;
double r798514 = t;
double r798515 = r798513 * r798514;
double r798516 = a;
double r798517 = 4.0;
double r798518 = r798516 * r798517;
double r798519 = r798518 * r798514;
double r798520 = r798515 - r798519;
double r798521 = b;
double r798522 = c;
double r798523 = r798521 * r798522;
double r798524 = r798520 + r798523;
double r798525 = r798507 * r798517;
double r798526 = i;
double r798527 = r798525 * r798526;
double r798528 = r798524 - r798527;
double r798529 = j;
double r798530 = 27.0;
double r798531 = r798529 * r798530;
double r798532 = k;
double r798533 = r798531 * r798532;
double r798534 = r798528 - r798533;
return r798534;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r798535 = t;
double r798536 = -4.057206776567972e-131;
bool r798537 = r798535 <= r798536;
double r798538 = x;
double r798539 = 18.0;
double r798540 = r798538 * r798539;
double r798541 = y;
double r798542 = r798540 * r798541;
double r798543 = z;
double r798544 = r798542 * r798543;
double r798545 = a;
double r798546 = 4.0;
double r798547 = r798545 * r798546;
double r798548 = r798544 - r798547;
double r798549 = r798535 * r798548;
double r798550 = b;
double r798551 = c;
double r798552 = r798550 * r798551;
double r798553 = r798538 * r798546;
double r798554 = i;
double r798555 = r798553 * r798554;
double r798556 = j;
double r798557 = 27.0;
double r798558 = k;
double r798559 = r798557 * r798558;
double r798560 = r798556 * r798559;
double r798561 = r798555 + r798560;
double r798562 = r798552 - r798561;
double r798563 = r798549 + r798562;
double r798564 = 5.716951769289909e-142;
bool r798565 = r798535 <= r798564;
double r798566 = -4.0;
double r798567 = r798566 * r798545;
double r798568 = r798535 * r798567;
double r798569 = r798556 * r798557;
double r798570 = r798569 * r798558;
double r798571 = r798555 + r798570;
double r798572 = r798552 - r798571;
double r798573 = r798568 + r798572;
double r798574 = r798541 * r798543;
double r798575 = r798540 * r798574;
double r798576 = r798575 - r798547;
double r798577 = r798535 * r798576;
double r798578 = r798577 + r798572;
double r798579 = r798565 ? r798573 : r798578;
double r798580 = r798537 ? r798563 : r798579;
return r798580;
}




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.9 |
|---|---|
| Target | 1.7 |
| Herbie | 4.8 |
if t < -4.057206776567972e-131Initial program 3.4
Simplified3.4
rmApplied associate-*l*3.4
if -4.057206776567972e-131 < t < 5.716951769289909e-142Initial program 10.3
Simplified10.3
rmApplied associate-*l*10.6
Taylor expanded around 0 6.8
if 5.716951769289909e-142 < t Initial program 3.6
Simplified3.6
rmApplied associate-*l*4.1
Final simplification4.8
herbie shell --seed 2020018
(FPCore (x y z t a b c i j k)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, E"
:precision binary64
:herbie-target
(if (< t -1.6210815397541398e-69) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4)) (- (* c b) (* 27 (* k j)))) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b)))))
(- (- (+ (- (* (* (* (* x 18) y) z) t) (* (* a 4) t)) (* b c)) (* (* x 4) i)) (* (* j 27) k)))