\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}\;a \leq -1.1293488291686183 \cdot 10^{+138}:\\
\;\;\;\;a\\
\mathbf{elif}\;a \leq 2.755501149415783 \cdot 10^{+261}:\\
\;\;\;\;\frac{\left(x + y\right) \cdot z + \left(a \cdot t + y \cdot \left(a - b\right)\right)}{x + \left(y + t\right)}\\
\mathbf{else}:\\
\;\;\;\;a\\
\end{array}(FPCore (x y z t a b) :precision binary64 (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)))
(FPCore (x y z t a b)
:precision binary64
(if (<= a -1.1293488291686183e+138)
a
(if (<= a 2.755501149415783e+261)
(/ (+ (* (+ x y) z) (+ (* a t) (* y (- a b)))) (+ x (+ y t)))
a)))double code(double x, double y, double z, double t, double a, double b) {
return (((double) (((double) (((double) (((double) (x + y)) * z)) + ((double) (((double) (t + y)) * a)))) - ((double) (y * b)))) / ((double) (((double) (x + t)) + y)));
}
double code(double x, double y, double z, double t, double a, double b) {
double tmp;
if ((a <= -1.1293488291686183e+138)) {
tmp = a;
} else {
double tmp_1;
if ((a <= 2.755501149415783e+261)) {
tmp_1 = (((double) (((double) (((double) (x + y)) * z)) + ((double) (((double) (a * t)) + ((double) (y * ((double) (a - b)))))))) / ((double) (x + ((double) (y + t)))));
} else {
tmp_1 = a;
}
tmp = tmp_1;
}
return tmp;
}




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 | 26.0 |
|---|---|
| Target | 11.4 |
| Herbie | 23.4 |
if a < -1.1293488291686183e138 or 2.7555011494157831e261 < a Initial program Error: 42.5 bits
SimplifiedError: 42.5 bits
Taylor expanded around 0 Error: 27.6 bits
if -1.1293488291686183e138 < a < 2.7555011494157831e261Initial program Error: 22.5 bits
SimplifiedError: 22.5 bits
Final simplificationError: 23.4 bits
herbie shell --seed 2020203
(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.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)))