2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\left(a + b \cdot c\right) \cdot c\right) \cdot i\right)
\begin{array}{l}
\mathbf{if}\;\left(\left(a + b \cdot c\right) \cdot c\right) \cdot i \le -9.88131 \cdot 10^{-324} \lor \neg \left(\left(\left(a + b \cdot c\right) \cdot c\right) \cdot i \le 1.1529310559873625 \cdot 10^{302}\right):\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(a + b \cdot c\right) \cdot \left(c \cdot i\right)\right)\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \sqrt{\left(\left(a + b \cdot c\right) \cdot c\right) \cdot i} \cdot \sqrt{\left(\left(a + b \cdot c\right) \cdot c\right) \cdot i}\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r860889 = 2.0;
double r860890 = x;
double r860891 = y;
double r860892 = r860890 * r860891;
double r860893 = z;
double r860894 = t;
double r860895 = r860893 * r860894;
double r860896 = r860892 + r860895;
double r860897 = a;
double r860898 = b;
double r860899 = c;
double r860900 = r860898 * r860899;
double r860901 = r860897 + r860900;
double r860902 = r860901 * r860899;
double r860903 = i;
double r860904 = r860902 * r860903;
double r860905 = r860896 - r860904;
double r860906 = r860889 * r860905;
return r860906;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r860907 = a;
double r860908 = b;
double r860909 = c;
double r860910 = r860908 * r860909;
double r860911 = r860907 + r860910;
double r860912 = r860911 * r860909;
double r860913 = i;
double r860914 = r860912 * r860913;
double r860915 = -9.8813129168249e-324;
bool r860916 = r860914 <= r860915;
double r860917 = 1.1529310559873625e+302;
bool r860918 = r860914 <= r860917;
double r860919 = !r860918;
bool r860920 = r860916 || r860919;
double r860921 = 2.0;
double r860922 = x;
double r860923 = y;
double r860924 = r860922 * r860923;
double r860925 = z;
double r860926 = t;
double r860927 = r860925 * r860926;
double r860928 = r860924 + r860927;
double r860929 = r860909 * r860913;
double r860930 = r860911 * r860929;
double r860931 = r860928 - r860930;
double r860932 = r860921 * r860931;
double r860933 = sqrt(r860914);
double r860934 = r860933 * r860933;
double r860935 = r860928 - r860934;
double r860936 = r860921 * r860935;
double r860937 = r860920 ? r860932 : r860936;
return r860937;
}




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
Results
| Original | 6.5 |
|---|---|
| Target | 1.9 |
| Herbie | 1.7 |
if (* (* (+ a (* b c)) c) i) < -9.8813129168249e-324 or 1.1529310559873625e+302 < (* (* (+ a (* b c)) c) i) Initial program 13.8
rmApplied associate-*l*3.2
if -9.8813129168249e-324 < (* (* (+ a (* b c)) c) i) < 1.1529310559873625e+302Initial program 0.4
rmApplied add-sqr-sqrt0.5
Final simplification1.7
herbie shell --seed 2020057
(FPCore (x y z t a b c i)
:name "Diagrams.ThreeD.Shapes:frustum from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(* 2 (- (+ (* x y) (* z t)) (* (+ a (* b c)) (* c i))))
(* 2 (- (+ (* x y) (* z t)) (* (* (+ a (* b c)) c) i))))