\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}\;x \le 2.233890913137363 \cdot 10^{-21}:\\
\;\;\;\;t \cdot \left(\left(\left(\left(x \cdot 18\right) \cdot \left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right)\right) \cdot \sqrt[3]{y}\right) \cdot z - 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)\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(t \cdot \left(18 \cdot \left(x \cdot \left(z \cdot y\right)\right) - a \cdot 4\right)\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 r696653 = x;
double r696654 = 18.0;
double r696655 = r696653 * r696654;
double r696656 = y;
double r696657 = r696655 * r696656;
double r696658 = z;
double r696659 = r696657 * r696658;
double r696660 = t;
double r696661 = r696659 * r696660;
double r696662 = a;
double r696663 = 4.0;
double r696664 = r696662 * r696663;
double r696665 = r696664 * r696660;
double r696666 = r696661 - r696665;
double r696667 = b;
double r696668 = c;
double r696669 = r696667 * r696668;
double r696670 = r696666 + r696669;
double r696671 = r696653 * r696663;
double r696672 = i;
double r696673 = r696671 * r696672;
double r696674 = r696670 - r696673;
double r696675 = j;
double r696676 = 27.0;
double r696677 = r696675 * r696676;
double r696678 = k;
double r696679 = r696677 * r696678;
double r696680 = r696674 - r696679;
return r696680;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r696681 = x;
double r696682 = 2.2338909131373625e-21;
bool r696683 = r696681 <= r696682;
double r696684 = t;
double r696685 = 18.0;
double r696686 = r696681 * r696685;
double r696687 = y;
double r696688 = cbrt(r696687);
double r696689 = r696688 * r696688;
double r696690 = r696686 * r696689;
double r696691 = r696690 * r696688;
double r696692 = z;
double r696693 = r696691 * r696692;
double r696694 = a;
double r696695 = 4.0;
double r696696 = r696694 * r696695;
double r696697 = r696693 - r696696;
double r696698 = r696684 * r696697;
double r696699 = b;
double r696700 = c;
double r696701 = r696699 * r696700;
double r696702 = r696681 * r696695;
double r696703 = i;
double r696704 = r696702 * r696703;
double r696705 = j;
double r696706 = 27.0;
double r696707 = r696705 * r696706;
double r696708 = k;
double r696709 = r696707 * r696708;
double r696710 = r696704 + r696709;
double r696711 = r696701 - r696710;
double r696712 = r696698 + r696711;
double r696713 = 1.0;
double r696714 = r696692 * r696687;
double r696715 = r696681 * r696714;
double r696716 = r696685 * r696715;
double r696717 = r696716 - r696696;
double r696718 = r696684 * r696717;
double r696719 = r696713 * r696718;
double r696720 = r696719 + r696711;
double r696721 = r696683 ? r696712 : r696720;
return r696721;
}




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.2 |
|---|---|
| Target | 1.4 |
| Herbie | 4.4 |
if x < 2.2338909131373625e-21Initial program 3.6
Simplified3.7
rmApplied add-cube-cbrt3.7
Applied associate-*r*3.7
if 2.2338909131373625e-21 < x Initial program 11.2
Simplified11.2
rmApplied add-cube-cbrt11.3
Applied associate-*r*11.3
rmApplied *-un-lft-identity11.3
Applied associate-*l*11.3
Simplified7.0
Final simplification4.4
herbie shell --seed 2020039
(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)))