\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 -2.502165254925273188924039774576570078499 \cdot 10^{287} \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 9.56574528958459179758686821776355245136 \cdot 10^{256}\right):\\
\;\;\;\;\left(a + z\right) - b\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\left(x + t\right) + y}{\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 r519442 = x;
double r519443 = y;
double r519444 = r519442 + r519443;
double r519445 = z;
double r519446 = r519444 * r519445;
double r519447 = t;
double r519448 = r519447 + r519443;
double r519449 = a;
double r519450 = r519448 * r519449;
double r519451 = r519446 + r519450;
double r519452 = b;
double r519453 = r519443 * r519452;
double r519454 = r519451 - r519453;
double r519455 = r519442 + r519447;
double r519456 = r519455 + r519443;
double r519457 = r519454 / r519456;
return r519457;
}
double f(double x, double y, double z, double t, double a, double b) {
double r519458 = x;
double r519459 = y;
double r519460 = r519458 + r519459;
double r519461 = z;
double r519462 = r519460 * r519461;
double r519463 = t;
double r519464 = r519463 + r519459;
double r519465 = a;
double r519466 = r519464 * r519465;
double r519467 = r519462 + r519466;
double r519468 = b;
double r519469 = r519459 * r519468;
double r519470 = r519467 - r519469;
double r519471 = r519458 + r519463;
double r519472 = r519471 + r519459;
double r519473 = r519470 / r519472;
double r519474 = -2.5021652549252732e+287;
bool r519475 = r519473 <= r519474;
double r519476 = 9.565745289584592e+256;
bool r519477 = r519473 <= r519476;
double r519478 = !r519477;
bool r519479 = r519475 || r519478;
double r519480 = r519465 + r519461;
double r519481 = r519480 - r519468;
double r519482 = 1.0;
double r519483 = r519472 / r519470;
double r519484 = r519482 / r519483;
double r519485 = r519479 ? r519481 : r519484;
return r519485;
}




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.0 |
|---|---|
| Target | 11.3 |
| Herbie | 7.8 |
if (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < -2.5021652549252732e+287 or 9.565745289584592e+256 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) Initial program 61.6
rmApplied clear-num61.6
Taylor expanded around 0 17.3
if -2.5021652549252732e+287 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < 9.565745289584592e+256Initial program 0.3
rmApplied clear-num0.4
Final simplification7.8
herbie shell --seed 2019304
(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)))