\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} = -\infty \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 1.034704077569510107532609430096622336618 \cdot 10^{282}\right):\\
\;\;\;\;\left(a + z\right) - b\\
\mathbf{else}:\\
\;\;\;\;\left(\left(x + y\right) \cdot z + \left(y \cdot \left(a - b\right) + a \cdot t\right)\right) \cdot \frac{1}{\left(x + t\right) + y}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r682864 = x;
double r682865 = y;
double r682866 = r682864 + r682865;
double r682867 = z;
double r682868 = r682866 * r682867;
double r682869 = t;
double r682870 = r682869 + r682865;
double r682871 = a;
double r682872 = r682870 * r682871;
double r682873 = r682868 + r682872;
double r682874 = b;
double r682875 = r682865 * r682874;
double r682876 = r682873 - r682875;
double r682877 = r682864 + r682869;
double r682878 = r682877 + r682865;
double r682879 = r682876 / r682878;
return r682879;
}
double f(double x, double y, double z, double t, double a, double b) {
double r682880 = x;
double r682881 = y;
double r682882 = r682880 + r682881;
double r682883 = z;
double r682884 = r682882 * r682883;
double r682885 = t;
double r682886 = r682885 + r682881;
double r682887 = a;
double r682888 = r682886 * r682887;
double r682889 = r682884 + r682888;
double r682890 = b;
double r682891 = r682881 * r682890;
double r682892 = r682889 - r682891;
double r682893 = r682880 + r682885;
double r682894 = r682893 + r682881;
double r682895 = r682892 / r682894;
double r682896 = -inf.0;
bool r682897 = r682895 <= r682896;
double r682898 = 1.0347040775695101e+282;
bool r682899 = r682895 <= r682898;
double r682900 = !r682899;
bool r682901 = r682897 || r682900;
double r682902 = r682887 + r682883;
double r682903 = r682902 - r682890;
double r682904 = r682887 - r682890;
double r682905 = r682881 * r682904;
double r682906 = r682887 * r682885;
double r682907 = r682905 + r682906;
double r682908 = r682884 + r682907;
double r682909 = 1.0;
double r682910 = r682909 / r682894;
double r682911 = r682908 * r682910;
double r682912 = r682901 ? r682903 : r682911;
return r682912;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 26.1 |
|---|---|
| Target | 11.2 |
| Herbie | 7.6 |
if (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < -inf.0 or 1.0347040775695101e+282 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) Initial program 63.3
rmApplied associate--l+63.3
Simplified63.3
rmApplied clear-num63.3
Taylor expanded around 0 17.8
if -inf.0 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < 1.0347040775695101e+282Initial program 0.3
rmApplied associate--l+0.3
Simplified0.3
rmApplied div-inv0.4
Final simplification7.6
herbie shell --seed 2019212
(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.5813117084150564e153) (- (+ z a) b) (if (< (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) 1.2285964308315609e82) (/ 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)))