\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -3.550785285630013736322572265977521807997 \cdot 10^{177}:\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\mathbf{elif}\;z \le 9.56138289533363135301744860674886759669 \cdot 10^{-188}:\\
\;\;\;\;\left(x + \frac{y \cdot z - x}{t \cdot z - x}\right) \cdot \frac{1}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{\left(x + 1\right) \cdot 1} - \frac{x \cdot \frac{1}{t \cdot z - x}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r985534 = x;
double r985535 = y;
double r985536 = z;
double r985537 = r985535 * r985536;
double r985538 = r985537 - r985534;
double r985539 = t;
double r985540 = r985539 * r985536;
double r985541 = r985540 - r985534;
double r985542 = r985538 / r985541;
double r985543 = r985534 + r985542;
double r985544 = 1.0;
double r985545 = r985534 + r985544;
double r985546 = r985543 / r985545;
return r985546;
}
double f(double x, double y, double z, double t) {
double r985547 = z;
double r985548 = -3.5507852856300137e+177;
bool r985549 = r985547 <= r985548;
double r985550 = x;
double r985551 = y;
double r985552 = t;
double r985553 = r985551 / r985552;
double r985554 = r985550 + r985553;
double r985555 = 1.0;
double r985556 = r985550 + r985555;
double r985557 = r985554 / r985556;
double r985558 = 9.561382895333631e-188;
bool r985559 = r985547 <= r985558;
double r985560 = r985551 * r985547;
double r985561 = r985560 - r985550;
double r985562 = r985552 * r985547;
double r985563 = r985562 - r985550;
double r985564 = r985561 / r985563;
double r985565 = r985550 + r985564;
double r985566 = 1.0;
double r985567 = r985566 / r985556;
double r985568 = r985565 * r985567;
double r985569 = r985551 / r985563;
double r985570 = fma(r985569, r985547, r985550);
double r985571 = r985556 * r985566;
double r985572 = r985570 / r985571;
double r985573 = r985566 / r985563;
double r985574 = r985550 * r985573;
double r985575 = r985574 / r985556;
double r985576 = r985572 - r985575;
double r985577 = r985559 ? r985568 : r985576;
double r985578 = r985549 ? r985557 : r985577;
return r985578;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.1 |
|---|---|
| Target | 0.3 |
| Herbie | 3.6 |
if z < -3.5507852856300137e+177Initial program 22.1
Taylor expanded around inf 6.0
if -3.5507852856300137e+177 < z < 9.561382895333631e-188Initial program 2.4
rmApplied div-inv2.5
if 9.561382895333631e-188 < z Initial program 9.2
rmApplied div-sub9.2
Applied associate-+r-9.2
Applied div-sub9.2
Simplified4.3
rmApplied div-inv4.3
Final simplification3.6
herbie shell --seed 2019362 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))