\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 -8.416712259254574092270707749732520074762 \cdot 10^{242}:\\
\;\;\;\;\left(a + z\right) - b\\
\mathbf{elif}\;\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.307468158284447910195168497396941423128 \cdot 10^{286}:\\
\;\;\;\;\frac{1}{\frac{x + \left(t + y\right)}{\mathsf{fma}\left(z, x + y, \left(t + y\right) \cdot a\right) - b \cdot y}}\\
\mathbf{else}:\\
\;\;\;\;\left(a + z\right) - b\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r54878266 = x;
double r54878267 = y;
double r54878268 = r54878266 + r54878267;
double r54878269 = z;
double r54878270 = r54878268 * r54878269;
double r54878271 = t;
double r54878272 = r54878271 + r54878267;
double r54878273 = a;
double r54878274 = r54878272 * r54878273;
double r54878275 = r54878270 + r54878274;
double r54878276 = b;
double r54878277 = r54878267 * r54878276;
double r54878278 = r54878275 - r54878277;
double r54878279 = r54878266 + r54878271;
double r54878280 = r54878279 + r54878267;
double r54878281 = r54878278 / r54878280;
return r54878281;
}
double f(double x, double y, double z, double t, double a, double b) {
double r54878282 = x;
double r54878283 = y;
double r54878284 = r54878282 + r54878283;
double r54878285 = z;
double r54878286 = r54878284 * r54878285;
double r54878287 = t;
double r54878288 = r54878287 + r54878283;
double r54878289 = a;
double r54878290 = r54878288 * r54878289;
double r54878291 = r54878286 + r54878290;
double r54878292 = b;
double r54878293 = r54878283 * r54878292;
double r54878294 = r54878291 - r54878293;
double r54878295 = r54878282 + r54878287;
double r54878296 = r54878295 + r54878283;
double r54878297 = r54878294 / r54878296;
double r54878298 = -8.416712259254574e+242;
bool r54878299 = r54878297 <= r54878298;
double r54878300 = r54878289 + r54878285;
double r54878301 = r54878300 - r54878292;
double r54878302 = 7.307468158284448e+286;
bool r54878303 = r54878297 <= r54878302;
double r54878304 = 1.0;
double r54878305 = r54878282 + r54878288;
double r54878306 = fma(r54878285, r54878284, r54878290);
double r54878307 = r54878292 * r54878283;
double r54878308 = r54878306 - r54878307;
double r54878309 = r54878305 / r54878308;
double r54878310 = r54878304 / r54878309;
double r54878311 = r54878303 ? r54878310 : r54878301;
double r54878312 = r54878299 ? r54878301 : r54878311;
return r54878312;
}




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.0 |
|---|---|
| Target | 11.3 |
| Herbie | 7.8 |
if (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < -8.416712259254574e+242 or 7.307468158284448e+286 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) Initial program 61.5
rmApplied clear-num61.5
Simplified61.5
Taylor expanded around 0 17.4
if -8.416712259254574e+242 < (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) < 7.307468158284448e+286Initial program 0.3
rmApplied clear-num0.5
Simplified0.5
Final simplification7.8
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y z t a b)
:name "AI.Clustering.Hierarchical.Internal:ward from clustering-0.2.1"
: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.0 (/ (+ (+ 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)))