\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)}\begin{array}{l}
\mathbf{if}\;z \le -5.783355807704604230086730940215264291525 \cdot 10^{-229} \lor \neg \left(z \le 1.3630801030974825092593943861048567836 \cdot 10^{-270}\right):\\
\;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(z, b - y, y\right)}{\mathsf{fma}\left(t, z, x \cdot y\right)}} - \frac{a}{\left(\frac{y}{z} + b\right) - y}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, z, x\right) - \frac{a}{\left(\frac{y}{z} + b\right) - y}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r1071073 = x;
double r1071074 = y;
double r1071075 = r1071073 * r1071074;
double r1071076 = z;
double r1071077 = t;
double r1071078 = a;
double r1071079 = r1071077 - r1071078;
double r1071080 = r1071076 * r1071079;
double r1071081 = r1071075 + r1071080;
double r1071082 = b;
double r1071083 = r1071082 - r1071074;
double r1071084 = r1071076 * r1071083;
double r1071085 = r1071074 + r1071084;
double r1071086 = r1071081 / r1071085;
return r1071086;
}
double f(double x, double y, double z, double t, double a, double b) {
double r1071087 = z;
double r1071088 = -5.783355807704604e-229;
bool r1071089 = r1071087 <= r1071088;
double r1071090 = 1.3630801030974825e-270;
bool r1071091 = r1071087 <= r1071090;
double r1071092 = !r1071091;
bool r1071093 = r1071089 || r1071092;
double r1071094 = 1.0;
double r1071095 = b;
double r1071096 = y;
double r1071097 = r1071095 - r1071096;
double r1071098 = fma(r1071087, r1071097, r1071096);
double r1071099 = t;
double r1071100 = x;
double r1071101 = r1071100 * r1071096;
double r1071102 = fma(r1071099, r1071087, r1071101);
double r1071103 = r1071098 / r1071102;
double r1071104 = r1071094 / r1071103;
double r1071105 = a;
double r1071106 = r1071096 / r1071087;
double r1071107 = r1071106 + r1071095;
double r1071108 = r1071107 - r1071096;
double r1071109 = r1071105 / r1071108;
double r1071110 = r1071104 - r1071109;
double r1071111 = fma(r1071100, r1071087, r1071100);
double r1071112 = r1071111 - r1071109;
double r1071113 = r1071093 ? r1071110 : r1071112;
return r1071113;
}




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 | 22.4 |
|---|---|
| Target | 17.4 |
| Herbie | 17.9 |
if z < -5.783355807704604e-229 or 1.3630801030974825e-270 < z Initial program 23.8
rmApplied sub-neg23.8
Applied distribute-lft-in23.8
rmApplied distribute-rgt-neg-out23.8
Applied unsub-neg23.8
Applied associate-+r-23.8
Applied div-sub23.8
Simplified23.8
Simplified22.0
Taylor expanded around 0 18.2
rmApplied clear-num18.3
if -5.783355807704604e-229 < z < 1.3630801030974825e-270Initial program 9.7
rmApplied sub-neg9.7
Applied distribute-lft-in9.7
rmApplied distribute-rgt-neg-out9.7
Applied unsub-neg9.7
Applied associate-+r-9.7
Applied div-sub9.7
Simplified9.7
Simplified10.6
Taylor expanded around 0 10.6
Taylor expanded around 0 14.9
Simplified14.9
Final simplification17.9
herbie shell --seed 2019362 +o rules:numerics
(FPCore (x y z t a b)
:name "Development.Shake.Progress:decay from shake-0.15.5"
:precision binary64
:herbie-target
(- (/ (+ (* z t) (* y x)) (+ y (* z (- b y)))) (/ a (+ (- b y) (/ y z))))
(/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))))