\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 2.334828876963019126638500573266416450503 \cdot 10^{262}\right):\\
\;\;\;\;\left(a + z\right) - b\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\left(\left(x + t\right) + y\right) \cdot \frac{1}{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r887026 = x;
double r887027 = y;
double r887028 = r887026 + r887027;
double r887029 = z;
double r887030 = r887028 * r887029;
double r887031 = t;
double r887032 = r887031 + r887027;
double r887033 = a;
double r887034 = r887032 * r887033;
double r887035 = r887030 + r887034;
double r887036 = b;
double r887037 = r887027 * r887036;
double r887038 = r887035 - r887037;
double r887039 = r887026 + r887031;
double r887040 = r887039 + r887027;
double r887041 = r887038 / r887040;
return r887041;
}
double f(double x, double y, double z, double t, double a, double b) {
double r887042 = x;
double r887043 = y;
double r887044 = r887042 + r887043;
double r887045 = z;
double r887046 = r887044 * r887045;
double r887047 = t;
double r887048 = r887047 + r887043;
double r887049 = a;
double r887050 = r887048 * r887049;
double r887051 = r887046 + r887050;
double r887052 = b;
double r887053 = r887043 * r887052;
double r887054 = r887051 - r887053;
double r887055 = r887042 + r887047;
double r887056 = r887055 + r887043;
double r887057 = r887054 / r887056;
double r887058 = -inf.0;
bool r887059 = r887057 <= r887058;
double r887060 = 2.334828876963019e+262;
bool r887061 = r887057 <= r887060;
double r887062 = !r887061;
bool r887063 = r887059 || r887062;
double r887064 = r887049 + r887045;
double r887065 = r887064 - r887052;
double r887066 = 1.0;
double r887067 = r887066 / r887054;
double r887068 = r887056 * r887067;
double r887069 = r887066 / r887068;
double r887070 = r887063 ? r887065 : r887069;
return r887070;
}




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 | 27.3 |
|---|---|
| Target | 11.4 |
| Herbie | 8.0 |
if (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < -inf.0 or 2.334828876963019e+262 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) Initial program 62.5
rmApplied clear-num62.5
Taylor expanded around 0 17.6
if -inf.0 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < 2.334828876963019e+262Initial program 0.3
rmApplied clear-num0.5
rmApplied div-inv0.6
Final simplification8.0
herbie shell --seed 2019353
(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)))