\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}\;y \le -209147167716174719629409475032590057472 \lor \neg \left(y \le 36329201731618045933363253213134848\right):\\
\;\;\;\;\left(\left(\left(\left(18 \cdot \left(x \cdot y\right)\right) \cdot \left(t \cdot z\right) - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - j \cdot \left(27 \cdot k\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\right)\right) - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - j \cdot \left(27 \cdot k\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 r481827 = x;
double r481828 = 18.0;
double r481829 = r481827 * r481828;
double r481830 = y;
double r481831 = r481829 * r481830;
double r481832 = z;
double r481833 = r481831 * r481832;
double r481834 = t;
double r481835 = r481833 * r481834;
double r481836 = a;
double r481837 = 4.0;
double r481838 = r481836 * r481837;
double r481839 = r481838 * r481834;
double r481840 = r481835 - r481839;
double r481841 = b;
double r481842 = c;
double r481843 = r481841 * r481842;
double r481844 = r481840 + r481843;
double r481845 = r481827 * r481837;
double r481846 = i;
double r481847 = r481845 * r481846;
double r481848 = r481844 - r481847;
double r481849 = j;
double r481850 = 27.0;
double r481851 = r481849 * r481850;
double r481852 = k;
double r481853 = r481851 * r481852;
double r481854 = r481848 - r481853;
return r481854;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r481855 = y;
double r481856 = -2.0914716771617472e+38;
bool r481857 = r481855 <= r481856;
double r481858 = 3.6329201731618046e+34;
bool r481859 = r481855 <= r481858;
double r481860 = !r481859;
bool r481861 = r481857 || r481860;
double r481862 = 18.0;
double r481863 = x;
double r481864 = r481863 * r481855;
double r481865 = r481862 * r481864;
double r481866 = t;
double r481867 = z;
double r481868 = r481866 * r481867;
double r481869 = r481865 * r481868;
double r481870 = a;
double r481871 = 4.0;
double r481872 = r481870 * r481871;
double r481873 = r481872 * r481866;
double r481874 = r481869 - r481873;
double r481875 = b;
double r481876 = c;
double r481877 = r481875 * r481876;
double r481878 = r481874 + r481877;
double r481879 = r481863 * r481871;
double r481880 = i;
double r481881 = r481879 * r481880;
double r481882 = r481878 - r481881;
double r481883 = j;
double r481884 = 27.0;
double r481885 = k;
double r481886 = r481884 * r481885;
double r481887 = r481883 * r481886;
double r481888 = r481882 - r481887;
double r481889 = r481867 * r481855;
double r481890 = r481863 * r481889;
double r481891 = r481866 * r481890;
double r481892 = r481862 * r481891;
double r481893 = r481892 - r481873;
double r481894 = r481893 + r481877;
double r481895 = r481894 - r481881;
double r481896 = r481895 - r481887;
double r481897 = r481861 ? r481888 : r481896;
return r481897;
}




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.3 |
|---|---|
| Target | 1.6 |
| Herbie | 4.1 |
if y < -2.0914716771617472e+38 or 3.6329201731618046e+34 < y Initial program 11.7
rmApplied associate-*l*11.6
rmApplied associate-*l*8.5
Simplified8.5
Taylor expanded around 0 8.5
if -2.0914716771617472e+38 < y < 3.6329201731618046e+34Initial program 1.5
rmApplied associate-*l*1.5
rmApplied pow11.5
Applied pow11.5
Applied pow11.5
Applied pow11.5
Applied pow11.5
Applied pow-prod-down1.5
Applied pow-prod-down1.5
Applied pow-prod-down1.5
Applied pow-prod-down1.5
Simplified1.4
Final simplification4.1
herbie shell --seed 2019304 +o rules:numerics
(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.680279438052224) (+ (- (* (* 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)))