\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.779578717410861142967896309158519663266 \cdot 10^{155} \lor \neg \left(y \le 9.365956405334702717952719007577685926563 \cdot 10^{74}\right):\\
\;\;\;\;a + \left(z - b\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(x + y\right) \cdot z + a \cdot \left(y + t\right)\right) - b \cdot y\right) \cdot \frac{1}{t + \left(x + y\right)}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r620661 = x;
double r620662 = y;
double r620663 = r620661 + r620662;
double r620664 = z;
double r620665 = r620663 * r620664;
double r620666 = t;
double r620667 = r620666 + r620662;
double r620668 = a;
double r620669 = r620667 * r620668;
double r620670 = r620665 + r620669;
double r620671 = b;
double r620672 = r620662 * r620671;
double r620673 = r620670 - r620672;
double r620674 = r620661 + r620666;
double r620675 = r620674 + r620662;
double r620676 = r620673 / r620675;
return r620676;
}
double f(double x, double y, double z, double t, double a, double b) {
double r620677 = y;
double r620678 = -2.779578717410861e+155;
bool r620679 = r620677 <= r620678;
double r620680 = 9.365956405334703e+74;
bool r620681 = r620677 <= r620680;
double r620682 = !r620681;
bool r620683 = r620679 || r620682;
double r620684 = a;
double r620685 = z;
double r620686 = b;
double r620687 = r620685 - r620686;
double r620688 = r620684 + r620687;
double r620689 = x;
double r620690 = r620689 + r620677;
double r620691 = r620690 * r620685;
double r620692 = t;
double r620693 = r620677 + r620692;
double r620694 = r620684 * r620693;
double r620695 = r620691 + r620694;
double r620696 = r620686 * r620677;
double r620697 = r620695 - r620696;
double r620698 = 1.0;
double r620699 = r620692 + r620690;
double r620700 = r620698 / r620699;
double r620701 = r620697 * r620700;
double r620702 = r620683 ? r620688 : r620701;
return r620702;
}




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.9 |
|---|---|
| Target | 11.3 |
| Herbie | 16.6 |
if y < -2.779578717410861e+155 or 9.365956405334703e+74 < y Initial program 44.9
Simplified44.9
rmApplied div-inv45.0
Simplified45.0
Taylor expanded around inf 12.7
Simplified12.7
if -2.779578717410861e+155 < y < 9.365956405334703e+74Initial program 18.4
Simplified18.4
rmApplied div-inv18.5
Simplified18.5
Final simplification16.6
herbie shell --seed 2019195
(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)))