\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k
\begin{array}{l}
\mathbf{if}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i = -\infty:\\
\;\;\;\;\left(\left(c \cdot b + \left(-t\right) \cdot \left(a \cdot 4.0\right)\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(k \cdot 27.0\right) \cdot j\\
\mathbf{elif}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i \le 8.513289245050075 \cdot 10^{+301}:\\
\;\;\;\;t \cdot \left(\left(y \cdot x\right) \cdot \left(z \cdot 18.0\right) - a \cdot 4.0\right) + \left(c \cdot b - \left(\left(27.0 \cdot j\right) \cdot k + 4.0 \cdot \left(x \cdot i\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(c \cdot b + \left(e^{\log \left(\left(x \cdot 18.0\right) \cdot \left(\left(t \cdot z\right) \cdot y\right)\right)} - \left(a \cdot 4.0\right) \cdot t\right)\right) - \left(x \cdot 4.0\right) \cdot i\right) - 27.0 \cdot \left(j \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 r41219838 = x;
double r41219839 = 18.0;
double r41219840 = r41219838 * r41219839;
double r41219841 = y;
double r41219842 = r41219840 * r41219841;
double r41219843 = z;
double r41219844 = r41219842 * r41219843;
double r41219845 = t;
double r41219846 = r41219844 * r41219845;
double r41219847 = a;
double r41219848 = 4.0;
double r41219849 = r41219847 * r41219848;
double r41219850 = r41219849 * r41219845;
double r41219851 = r41219846 - r41219850;
double r41219852 = b;
double r41219853 = c;
double r41219854 = r41219852 * r41219853;
double r41219855 = r41219851 + r41219854;
double r41219856 = r41219838 * r41219848;
double r41219857 = i;
double r41219858 = r41219856 * r41219857;
double r41219859 = r41219855 - r41219858;
double r41219860 = j;
double r41219861 = 27.0;
double r41219862 = r41219860 * r41219861;
double r41219863 = k;
double r41219864 = r41219862 * r41219863;
double r41219865 = r41219859 - r41219864;
return r41219865;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r41219866 = t;
double r41219867 = x;
double r41219868 = 18.0;
double r41219869 = r41219867 * r41219868;
double r41219870 = y;
double r41219871 = r41219869 * r41219870;
double r41219872 = z;
double r41219873 = r41219871 * r41219872;
double r41219874 = r41219866 * r41219873;
double r41219875 = a;
double r41219876 = 4.0;
double r41219877 = r41219875 * r41219876;
double r41219878 = r41219877 * r41219866;
double r41219879 = r41219874 - r41219878;
double r41219880 = c;
double r41219881 = b;
double r41219882 = r41219880 * r41219881;
double r41219883 = r41219879 + r41219882;
double r41219884 = r41219867 * r41219876;
double r41219885 = i;
double r41219886 = r41219884 * r41219885;
double r41219887 = r41219883 - r41219886;
double r41219888 = -inf.0;
bool r41219889 = r41219887 <= r41219888;
double r41219890 = -r41219866;
double r41219891 = r41219890 * r41219877;
double r41219892 = r41219882 + r41219891;
double r41219893 = r41219892 - r41219886;
double r41219894 = k;
double r41219895 = 27.0;
double r41219896 = r41219894 * r41219895;
double r41219897 = j;
double r41219898 = r41219896 * r41219897;
double r41219899 = r41219893 - r41219898;
double r41219900 = 8.513289245050075e+301;
bool r41219901 = r41219887 <= r41219900;
double r41219902 = r41219870 * r41219867;
double r41219903 = r41219872 * r41219868;
double r41219904 = r41219902 * r41219903;
double r41219905 = r41219904 - r41219877;
double r41219906 = r41219866 * r41219905;
double r41219907 = r41219895 * r41219897;
double r41219908 = r41219907 * r41219894;
double r41219909 = r41219867 * r41219885;
double r41219910 = r41219876 * r41219909;
double r41219911 = r41219908 + r41219910;
double r41219912 = r41219882 - r41219911;
double r41219913 = r41219906 + r41219912;
double r41219914 = r41219866 * r41219872;
double r41219915 = r41219914 * r41219870;
double r41219916 = r41219869 * r41219915;
double r41219917 = log(r41219916);
double r41219918 = exp(r41219917);
double r41219919 = r41219918 - r41219878;
double r41219920 = r41219882 + r41219919;
double r41219921 = r41219920 - r41219886;
double r41219922 = r41219897 * r41219894;
double r41219923 = r41219895 * r41219922;
double r41219924 = r41219921 - r41219923;
double r41219925 = r41219901 ? r41219913 : r41219924;
double r41219926 = r41219889 ? r41219899 : r41219925;
return r41219926;
}




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.1 |
|---|---|
| Target | 1.5 |
| Herbie | 2.1 |
if (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < -inf.0Initial program 60.6
rmApplied associate-*l*60.6
Taylor expanded around 0 30.8
if -inf.0 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < 8.513289245050075e+301Initial program 0.4
Simplified0.4
if 8.513289245050075e+301 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) Initial program 48.9
Taylor expanded around 0 48.9
rmApplied add-exp-log54.3
Applied add-exp-log56.6
Applied add-exp-log57.7
Applied add-exp-log57.7
Applied add-exp-log58.4
Applied prod-exp58.4
Applied prod-exp58.4
Applied prod-exp56.9
Applied prod-exp52.2
Simplified9.4
Final simplification2.1
herbie shell --seed 2019164
(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)))