\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 7.49829623920319232 \cdot 10^{267}\right):\\
\;\;\;\;\left(a + z\right) - b\\
\mathbf{else}:\\
\;\;\;\;\frac{1 \cdot \left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}{\left(x + t\right) + y}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r871835 = x;
double r871836 = y;
double r871837 = r871835 + r871836;
double r871838 = z;
double r871839 = r871837 * r871838;
double r871840 = t;
double r871841 = r871840 + r871836;
double r871842 = a;
double r871843 = r871841 * r871842;
double r871844 = r871839 + r871843;
double r871845 = b;
double r871846 = r871836 * r871845;
double r871847 = r871844 - r871846;
double r871848 = r871835 + r871840;
double r871849 = r871848 + r871836;
double r871850 = r871847 / r871849;
return r871850;
}
double f(double x, double y, double z, double t, double a, double b) {
double r871851 = x;
double r871852 = y;
double r871853 = r871851 + r871852;
double r871854 = z;
double r871855 = r871853 * r871854;
double r871856 = t;
double r871857 = r871856 + r871852;
double r871858 = a;
double r871859 = r871857 * r871858;
double r871860 = r871855 + r871859;
double r871861 = b;
double r871862 = r871852 * r871861;
double r871863 = r871860 - r871862;
double r871864 = r871851 + r871856;
double r871865 = r871864 + r871852;
double r871866 = r871863 / r871865;
double r871867 = -inf.0;
bool r871868 = r871866 <= r871867;
double r871869 = 7.498296239203192e+267;
bool r871870 = r871866 <= r871869;
double r871871 = !r871870;
bool r871872 = r871868 || r871871;
double r871873 = r871858 + r871854;
double r871874 = r871873 - r871861;
double r871875 = 1.0;
double r871876 = r871875 * r871860;
double r871877 = r871876 - r871862;
double r871878 = r871877 / r871865;
double r871879 = r871872 ? r871874 : r871878;
return r871879;
}




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.9 |
|---|---|
| Target | 10.8 |
| Herbie | 7.3 |
if (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < -inf.0 or 7.498296239203192e+267 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) Initial program 62.9
rmApplied clear-num62.9
Simplified62.9
Taylor expanded around 0 16.8
if -inf.0 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < 7.498296239203192e+267Initial program 0.2
rmApplied *-un-lft-identity0.2
Final simplification7.3
herbie shell --seed 2020020 +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)))