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(a + b \cdot c\right) \cdot c \le 0.0 \lor \neg \left(\left(a + b \cdot c\right) \cdot c \le 4.96602592598902903 \cdot 10^{275}\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) - \left(\sqrt{\left(a + b \cdot c\right) \cdot c} \cdot \sqrt{\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 r664922 = 2.0;
double r664923 = x;
double r664924 = y;
double r664925 = r664923 * r664924;
double r664926 = z;
double r664927 = t;
double r664928 = r664926 * r664927;
double r664929 = r664925 + r664928;
double r664930 = a;
double r664931 = b;
double r664932 = c;
double r664933 = r664931 * r664932;
double r664934 = r664930 + r664933;
double r664935 = r664934 * r664932;
double r664936 = i;
double r664937 = r664935 * r664936;
double r664938 = r664929 - r664937;
double r664939 = r664922 * r664938;
return r664939;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r664940 = a;
double r664941 = b;
double r664942 = c;
double r664943 = r664941 * r664942;
double r664944 = r664940 + r664943;
double r664945 = r664944 * r664942;
double r664946 = 0.0;
bool r664947 = r664945 <= r664946;
double r664948 = 4.966025925989029e+275;
bool r664949 = r664945 <= r664948;
double r664950 = !r664949;
bool r664951 = r664947 || r664950;
double r664952 = 2.0;
double r664953 = x;
double r664954 = y;
double r664955 = r664953 * r664954;
double r664956 = z;
double r664957 = t;
double r664958 = r664956 * r664957;
double r664959 = r664955 + r664958;
double r664960 = i;
double r664961 = r664942 * r664960;
double r664962 = r664944 * r664961;
double r664963 = r664959 - r664962;
double r664964 = r664952 * r664963;
double r664965 = sqrt(r664945);
double r664966 = r664965 * r664965;
double r664967 = r664966 * r664960;
double r664968 = r664959 - r664967;
double r664969 = r664952 * r664968;
double r664970 = r664951 ? r664964 : r664969;
return r664970;
}




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.3 |
|---|---|
| Target | 1.9 |
| Herbie | 1.5 |
if (* (+ a (* b c)) c) < 0.0 or 4.966025925989029e+275 < (* (+ a (* b c)) c) Initial program 10.1
rmApplied associate-*l*2.2
if 0.0 < (* (+ a (* b c)) c) < 4.966025925989029e+275Initial program 0.1
rmApplied add-sqr-sqrt0.2
Final simplification1.5
herbie shell --seed 2020081
(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))))