\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}\;z \le -1.339915709177500803043603435967818880006 \cdot 10^{130}:\\
\;\;\;\;\left(t \cdot \left(\left(x \cdot \left(y \cdot 18\right)\right) \cdot z - a \cdot 4\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + \sqrt{27} \cdot \left(\sqrt{27} \cdot \left(k \cdot j\right)\right)\right)\\
\mathbf{elif}\;z \le 4.983042576879064654649325286831293190518 \cdot 10^{-72}:\\
\;\;\;\;\left(t \cdot \left(x \cdot \left(\left(y \cdot 18\right) \cdot z\right) - a \cdot 4\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + \left(j \cdot 27\right) \cdot k\right)\\
\mathbf{else}:\\
\;\;\;\;\left(t \cdot \left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + j \cdot \left(27 \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 r498726 = x;
double r498727 = 18.0;
double r498728 = r498726 * r498727;
double r498729 = y;
double r498730 = r498728 * r498729;
double r498731 = z;
double r498732 = r498730 * r498731;
double r498733 = t;
double r498734 = r498732 * r498733;
double r498735 = a;
double r498736 = 4.0;
double r498737 = r498735 * r498736;
double r498738 = r498737 * r498733;
double r498739 = r498734 - r498738;
double r498740 = b;
double r498741 = c;
double r498742 = r498740 * r498741;
double r498743 = r498739 + r498742;
double r498744 = r498726 * r498736;
double r498745 = i;
double r498746 = r498744 * r498745;
double r498747 = r498743 - r498746;
double r498748 = j;
double r498749 = 27.0;
double r498750 = r498748 * r498749;
double r498751 = k;
double r498752 = r498750 * r498751;
double r498753 = r498747 - r498752;
return r498753;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r498754 = z;
double r498755 = -1.3399157091775008e+130;
bool r498756 = r498754 <= r498755;
double r498757 = t;
double r498758 = x;
double r498759 = y;
double r498760 = 18.0;
double r498761 = r498759 * r498760;
double r498762 = r498758 * r498761;
double r498763 = r498762 * r498754;
double r498764 = a;
double r498765 = 4.0;
double r498766 = r498764 * r498765;
double r498767 = r498763 - r498766;
double r498768 = r498757 * r498767;
double r498769 = b;
double r498770 = c;
double r498771 = r498769 * r498770;
double r498772 = r498768 + r498771;
double r498773 = r498758 * r498765;
double r498774 = i;
double r498775 = r498773 * r498774;
double r498776 = 27.0;
double r498777 = sqrt(r498776);
double r498778 = k;
double r498779 = j;
double r498780 = r498778 * r498779;
double r498781 = r498777 * r498780;
double r498782 = r498777 * r498781;
double r498783 = r498775 + r498782;
double r498784 = r498772 - r498783;
double r498785 = 4.983042576879065e-72;
bool r498786 = r498754 <= r498785;
double r498787 = r498761 * r498754;
double r498788 = r498758 * r498787;
double r498789 = r498788 - r498766;
double r498790 = r498757 * r498789;
double r498791 = r498790 + r498771;
double r498792 = r498779 * r498776;
double r498793 = r498792 * r498778;
double r498794 = r498775 + r498793;
double r498795 = r498791 - r498794;
double r498796 = r498758 * r498760;
double r498797 = r498796 * r498759;
double r498798 = r498797 * r498754;
double r498799 = r498798 - r498766;
double r498800 = r498757 * r498799;
double r498801 = r498800 + r498771;
double r498802 = r498776 * r498778;
double r498803 = r498779 * r498802;
double r498804 = r498775 + r498803;
double r498805 = r498801 - r498804;
double r498806 = r498786 ? r498795 : r498805;
double r498807 = r498756 ? r498784 : r498806;
return r498807;
}




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.7 |
|---|---|
| Target | 1.6 |
| Herbie | 4.2 |
if z < -1.3399157091775008e+130Initial program 7.9
Simplified7.9
rmApplied associate-*l*7.9
Simplified7.9
Taylor expanded around 0 7.8
rmApplied add-sqr-sqrt7.8
Applied associate-*l*7.8
if -1.3399157091775008e+130 < z < 4.983042576879065e-72Initial program 5.1
Simplified5.1
rmApplied associate-*l*5.1
Simplified5.1
rmApplied associate-*l*2.5
if 4.983042576879065e-72 < z Initial program 6.2
Simplified6.2
rmApplied associate-*l*6.3
Final simplification4.2
herbie shell --seed 2019323
(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)))