\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}\;y \le -2.6725091383027097 \cdot 10^{+73}:\\
\;\;\;\;\left(a + z\right) - b\\
\mathbf{elif}\;y \le 2.0423114556484996 \cdot 10^{+85}:\\
\;\;\;\;\frac{\mathsf{fma}\left(z, x, \mathsf{fma}\left(a, t, \left(\left(a + z\right) - b\right) \cdot y\right)\right)}{\left(y + t\right) + x}\\
\mathbf{else}:\\
\;\;\;\;\left(a + z\right) - b\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r46541609 = x;
double r46541610 = y;
double r46541611 = r46541609 + r46541610;
double r46541612 = z;
double r46541613 = r46541611 * r46541612;
double r46541614 = t;
double r46541615 = r46541614 + r46541610;
double r46541616 = a;
double r46541617 = r46541615 * r46541616;
double r46541618 = r46541613 + r46541617;
double r46541619 = b;
double r46541620 = r46541610 * r46541619;
double r46541621 = r46541618 - r46541620;
double r46541622 = r46541609 + r46541614;
double r46541623 = r46541622 + r46541610;
double r46541624 = r46541621 / r46541623;
return r46541624;
}
double f(double x, double y, double z, double t, double a, double b) {
double r46541625 = y;
double r46541626 = -2.6725091383027097e+73;
bool r46541627 = r46541625 <= r46541626;
double r46541628 = a;
double r46541629 = z;
double r46541630 = r46541628 + r46541629;
double r46541631 = b;
double r46541632 = r46541630 - r46541631;
double r46541633 = 2.0423114556484996e+85;
bool r46541634 = r46541625 <= r46541633;
double r46541635 = x;
double r46541636 = t;
double r46541637 = r46541632 * r46541625;
double r46541638 = fma(r46541628, r46541636, r46541637);
double r46541639 = fma(r46541629, r46541635, r46541638);
double r46541640 = r46541625 + r46541636;
double r46541641 = r46541640 + r46541635;
double r46541642 = r46541639 / r46541641;
double r46541643 = r46541634 ? r46541642 : r46541632;
double r46541644 = r46541627 ? r46541632 : r46541643;
return r46541644;
}




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 | 25.4 |
|---|---|
| Target | 11.2 |
| Herbie | 15.4 |
if y < -2.6725091383027097e+73 or 2.0423114556484996e+85 < y Initial program 41.2
Simplified41.1
Taylor expanded around 0 14.4
if -2.6725091383027097e+73 < y < 2.0423114556484996e+85Initial program 15.9
Simplified16.0
rmApplied *-commutative16.0
Final simplification15.4
herbie shell --seed 2019168 +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 (/ (+ (+ 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)))