\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)}\begin{array}{l}
\mathbf{if}\;\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} = -\infty:\\
\;\;\;\;x\\
\mathbf{elif}\;\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} \le -1.0453105058496541 \cdot 10^{-301}:\\
\;\;\;\;\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)}\\
\mathbf{elif}\;\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} \le 0.0 \lor \neg \left(\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} \le 1.9961735121647787 \cdot 10^{271}\right):\\
\;\;\;\;\frac{t}{b} - \frac{a}{b}\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot y + z \cdot \left(t - a\right)\right) \cdot \frac{1}{y + z \cdot \left(b - y\right)}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r480230 = x;
double r480231 = y;
double r480232 = r480230 * r480231;
double r480233 = z;
double r480234 = t;
double r480235 = a;
double r480236 = r480234 - r480235;
double r480237 = r480233 * r480236;
double r480238 = r480232 + r480237;
double r480239 = b;
double r480240 = r480239 - r480231;
double r480241 = r480233 * r480240;
double r480242 = r480231 + r480241;
double r480243 = r480238 / r480242;
return r480243;
}
double f(double x, double y, double z, double t, double a, double b) {
double r480244 = x;
double r480245 = y;
double r480246 = r480244 * r480245;
double r480247 = z;
double r480248 = t;
double r480249 = a;
double r480250 = r480248 - r480249;
double r480251 = r480247 * r480250;
double r480252 = r480246 + r480251;
double r480253 = b;
double r480254 = r480253 - r480245;
double r480255 = r480247 * r480254;
double r480256 = r480245 + r480255;
double r480257 = r480252 / r480256;
double r480258 = -inf.0;
bool r480259 = r480257 <= r480258;
double r480260 = -1.045310505849654e-301;
bool r480261 = r480257 <= r480260;
double r480262 = 0.0;
bool r480263 = r480257 <= r480262;
double r480264 = 1.9961735121647787e+271;
bool r480265 = r480257 <= r480264;
double r480266 = !r480265;
bool r480267 = r480263 || r480266;
double r480268 = r480248 / r480253;
double r480269 = r480249 / r480253;
double r480270 = r480268 - r480269;
double r480271 = 1.0;
double r480272 = r480271 / r480256;
double r480273 = r480252 * r480272;
double r480274 = r480267 ? r480270 : r480273;
double r480275 = r480261 ? r480257 : r480274;
double r480276 = r480259 ? r480244 : r480275;
return r480276;
}




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 | 23.8 |
|---|---|
| Target | 18.2 |
| Herbie | 15.7 |
if (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))) < -inf.0Initial program 64.0
rmApplied clear-num64.0
rmApplied div-inv64.0
Applied associate-/r*64.0
Simplified64.0
Taylor expanded around 0 37.3
if -inf.0 < (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))) < -1.045310505849654e-301Initial program 0.3
if -1.045310505849654e-301 < (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))) < 0.0 or 1.9961735121647787e+271 < (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))) Initial program 56.8
rmApplied clear-num56.8
rmApplied div-inv56.8
Applied associate-/r*56.8
Simplified56.8
Taylor expanded around inf 38.3
if 0.0 < (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))) < 1.9961735121647787e+271Initial program 0.3
rmApplied div-inv0.4
Final simplification15.7
herbie shell --seed 2020042
(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)))))