\frac{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}{\left(x + t\right) + y}\begin{array}{l}
\mathbf{if}\;\frac{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}{\left(x + t\right) + y} \le -3.371023939266602 \cdot 10^{224} \lor \neg \left(\frac{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}{\left(x + t\right) + y} \le 6.4510149534974711 \cdot 10^{259}\right):\\
\;\;\;\;\left(a + z\right) - b\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\left(x + t\right) + y}{\mathsf{fma}\left(z, x + y, \left(t + y\right) \cdot a - y \cdot b\right)}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r1049917 = x;
double r1049918 = y;
double r1049919 = r1049917 + r1049918;
double r1049920 = z;
double r1049921 = r1049919 * r1049920;
double r1049922 = t;
double r1049923 = r1049922 + r1049918;
double r1049924 = a;
double r1049925 = r1049923 * r1049924;
double r1049926 = r1049921 + r1049925;
double r1049927 = b;
double r1049928 = r1049918 * r1049927;
double r1049929 = r1049926 - r1049928;
double r1049930 = r1049917 + r1049922;
double r1049931 = r1049930 + r1049918;
double r1049932 = r1049929 / r1049931;
return r1049932;
}
double f(double x, double y, double z, double t, double a, double b) {
double r1049933 = x;
double r1049934 = y;
double r1049935 = r1049933 + r1049934;
double r1049936 = z;
double r1049937 = r1049935 * r1049936;
double r1049938 = t;
double r1049939 = r1049938 + r1049934;
double r1049940 = a;
double r1049941 = r1049939 * r1049940;
double r1049942 = r1049937 + r1049941;
double r1049943 = b;
double r1049944 = r1049934 * r1049943;
double r1049945 = r1049942 - r1049944;
double r1049946 = r1049933 + r1049938;
double r1049947 = r1049946 + r1049934;
double r1049948 = r1049945 / r1049947;
double r1049949 = -3.3710239392666025e+224;
bool r1049950 = r1049948 <= r1049949;
double r1049951 = 6.451014953497471e+259;
bool r1049952 = r1049948 <= r1049951;
double r1049953 = !r1049952;
bool r1049954 = r1049950 || r1049953;
double r1049955 = r1049940 + r1049936;
double r1049956 = r1049955 - r1049943;
double r1049957 = 1.0;
double r1049958 = r1049941 - r1049944;
double r1049959 = fma(r1049936, r1049935, r1049958);
double r1049960 = r1049947 / r1049959;
double r1049961 = r1049957 / r1049960;
double r1049962 = r1049954 ? r1049956 : r1049961;
return r1049962;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 27.1 |
|---|---|
| Target | 11.5 |
| Herbie | 8.4 |
if (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < -3.3710239392666025e+224 or 6.451014953497471e+259 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) Initial program 59.3
rmApplied clear-num59.3
Simplified59.3
Taylor expanded around 0 18.0
if -3.3710239392666025e+224 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < 6.451014953497471e+259Initial program 0.3
rmApplied clear-num0.4
Simplified0.4
Final simplification8.4
herbie shell --seed 2020021 +o rules:numerics
(FPCore (x y z t a b)
:name "AI.Clustering.Hierarchical.Internal:ward from clustering-0.2.1"
:precision binary64
:herbie-target
(if (< (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) -3.5813117084150564e+153) (- (+ z a) b) (if (< (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) 1.2285964308315609e+82) (/ 1 (/ (+ (+ x t) y) (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)))) (- (+ z a) b)))
(/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)))