\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}\;z \le -1.061610428241891645480708199708681011513 \cdot 10^{213}:\\
\;\;\;\;z\\
\mathbf{elif}\;z \le -79984826952145731778421884972492363137020:\\
\;\;\;\;\frac{\mathsf{fma}\left(a, t + y, \mathsf{fma}\left(x, z, y \cdot \left(z - b\right)\right)\right)}{\left(x + t\right) + y}\\
\mathbf{elif}\;z \le -1.299216067398793496033270482516750923125 \cdot 10^{-13}:\\
\;\;\;\;a\\
\mathbf{elif}\;z \le 1.515482064664791338217368179176752602296 \cdot 10^{167}:\\
\;\;\;\;\frac{\mathsf{fma}\left(a, t + y, \mathsf{fma}\left(x, z, y \cdot \left(z - b\right)\right)\right)}{\left(x + t\right) + y}\\
\mathbf{else}:\\
\;\;\;\;z\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r592185 = x;
double r592186 = y;
double r592187 = r592185 + r592186;
double r592188 = z;
double r592189 = r592187 * r592188;
double r592190 = t;
double r592191 = r592190 + r592186;
double r592192 = a;
double r592193 = r592191 * r592192;
double r592194 = r592189 + r592193;
double r592195 = b;
double r592196 = r592186 * r592195;
double r592197 = r592194 - r592196;
double r592198 = r592185 + r592190;
double r592199 = r592198 + r592186;
double r592200 = r592197 / r592199;
return r592200;
}
double f(double x, double y, double z, double t, double a, double b) {
double r592201 = z;
double r592202 = -1.0616104282418916e+213;
bool r592203 = r592201 <= r592202;
double r592204 = -7.998482695214573e+40;
bool r592205 = r592201 <= r592204;
double r592206 = a;
double r592207 = t;
double r592208 = y;
double r592209 = r592207 + r592208;
double r592210 = x;
double r592211 = b;
double r592212 = r592201 - r592211;
double r592213 = r592208 * r592212;
double r592214 = fma(r592210, r592201, r592213);
double r592215 = fma(r592206, r592209, r592214);
double r592216 = r592210 + r592207;
double r592217 = r592216 + r592208;
double r592218 = r592215 / r592217;
double r592219 = -1.2992160673987935e-13;
bool r592220 = r592201 <= r592219;
double r592221 = 1.5154820646647913e+167;
bool r592222 = r592201 <= r592221;
double r592223 = r592222 ? r592218 : r592201;
double r592224 = r592220 ? r592206 : r592223;
double r592225 = r592205 ? r592218 : r592224;
double r592226 = r592203 ? r592201 : r592225;
return r592226;
}




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 | 26.4 |
|---|---|
| Target | 11.2 |
| Herbie | 23.9 |
if z < -1.0616104282418916e+213 or 1.5154820646647913e+167 < z Initial program 43.8
Simplified43.8
Taylor expanded around 0 25.6
if -1.0616104282418916e+213 < z < -7.998482695214573e+40 or -1.2992160673987935e-13 < z < 1.5154820646647913e+167Initial program 22.3
Simplified22.3
if -7.998482695214573e+40 < z < -1.2992160673987935e-13Initial program 22.3
Simplified22.3
Taylor expanded around inf 42.4
Final simplification23.9
herbie shell --seed 2019325 +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)))