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}\;c \le 4487426699771173142528:\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(b \cdot c + a\right) \cdot \left(i \cdot c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(a \cdot i + c \cdot \left(i \cdot b\right)\right) \cdot c\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r33950991 = 2.0;
double r33950992 = x;
double r33950993 = y;
double r33950994 = r33950992 * r33950993;
double r33950995 = z;
double r33950996 = t;
double r33950997 = r33950995 * r33950996;
double r33950998 = r33950994 + r33950997;
double r33950999 = a;
double r33951000 = b;
double r33951001 = c;
double r33951002 = r33951000 * r33951001;
double r33951003 = r33950999 + r33951002;
double r33951004 = r33951003 * r33951001;
double r33951005 = i;
double r33951006 = r33951004 * r33951005;
double r33951007 = r33950998 - r33951006;
double r33951008 = r33950991 * r33951007;
return r33951008;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r33951009 = c;
double r33951010 = 4.487426699771173e+21;
bool r33951011 = r33951009 <= r33951010;
double r33951012 = 2.0;
double r33951013 = x;
double r33951014 = y;
double r33951015 = r33951013 * r33951014;
double r33951016 = z;
double r33951017 = t;
double r33951018 = r33951016 * r33951017;
double r33951019 = r33951015 + r33951018;
double r33951020 = b;
double r33951021 = r33951020 * r33951009;
double r33951022 = a;
double r33951023 = r33951021 + r33951022;
double r33951024 = i;
double r33951025 = r33951024 * r33951009;
double r33951026 = r33951023 * r33951025;
double r33951027 = r33951019 - r33951026;
double r33951028 = r33951012 * r33951027;
double r33951029 = r33951022 * r33951024;
double r33951030 = r33951024 * r33951020;
double r33951031 = r33951009 * r33951030;
double r33951032 = r33951029 + r33951031;
double r33951033 = r33951032 * r33951009;
double r33951034 = r33951019 - r33951033;
double r33951035 = r33951012 * r33951034;
double r33951036 = r33951011 ? r33951028 : r33951035;
return r33951036;
}




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.7 |
| Herbie | 1.4 |
if c < 4.487426699771173e+21Initial program 3.9
rmApplied associate-*l*1.2
if 4.487426699771173e+21 < c Initial program 22.3
rmApplied associate-*l*5.3
Taylor expanded around inf 28.9
Simplified4.6
Taylor expanded around inf 28.9
Simplified2.9
Final simplification1.4
herbie shell --seed 2019168
(FPCore (x y z t a b c i)
:name "Diagrams.ThreeD.Shapes:frustum from diagrams-lib-1.3.0.3, A"
:herbie-target
(* 2.0 (- (+ (* x y) (* z t)) (* (+ a (* b c)) (* c i))))
(* 2.0 (- (+ (* x y) (* z t)) (* (* (+ a (* b c)) c) i))))