\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 -3.779017099091306629227354324491082033966 \cdot 10^{-72} \lor \neg \left(y \le 5.718779504277736397867079463733055523154 \cdot 10^{75}\right):\\
\;\;\;\;a - \left(b - z\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{1}{\mathsf{fma}\left(x, z, \mathsf{fma}\left(y, \left(a + z\right) - b, a \cdot t\right)\right)} \cdot \left(\left(y + t\right) + x\right)}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r675137 = x;
double r675138 = y;
double r675139 = r675137 + r675138;
double r675140 = z;
double r675141 = r675139 * r675140;
double r675142 = t;
double r675143 = r675142 + r675138;
double r675144 = a;
double r675145 = r675143 * r675144;
double r675146 = r675141 + r675145;
double r675147 = b;
double r675148 = r675138 * r675147;
double r675149 = r675146 - r675148;
double r675150 = r675137 + r675142;
double r675151 = r675150 + r675138;
double r675152 = r675149 / r675151;
return r675152;
}
double f(double x, double y, double z, double t, double a, double b) {
double r675153 = y;
double r675154 = -3.7790170990913066e-72;
bool r675155 = r675153 <= r675154;
double r675156 = 5.718779504277736e+75;
bool r675157 = r675153 <= r675156;
double r675158 = !r675157;
bool r675159 = r675155 || r675158;
double r675160 = a;
double r675161 = b;
double r675162 = z;
double r675163 = r675161 - r675162;
double r675164 = r675160 - r675163;
double r675165 = 1.0;
double r675166 = x;
double r675167 = r675160 + r675162;
double r675168 = r675167 - r675161;
double r675169 = t;
double r675170 = r675160 * r675169;
double r675171 = fma(r675153, r675168, r675170);
double r675172 = fma(r675166, r675162, r675171);
double r675173 = r675165 / r675172;
double r675174 = r675153 + r675169;
double r675175 = r675174 + r675166;
double r675176 = r675173 * r675175;
double r675177 = r675165 / r675176;
double r675178 = r675159 ? r675164 : r675177;
return r675178;
}




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.5 |
|---|---|
| Target | 11.0 |
| Herbie | 17.1 |
if y < -3.7790170990913066e-72 or 5.718779504277736e+75 < y Initial program 37.6
Simplified37.6
Taylor expanded around inf 18.4
Simplified18.4
if -3.7790170990913066e-72 < y < 5.718779504277736e+75Initial program 15.7
Simplified15.7
rmApplied clear-num15.8
Simplified15.8
rmApplied div-inv15.9
Simplified15.9
Final simplification17.1
herbie shell --seed 2019194 +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)))