\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1} = -\infty:\\
\;\;\;\;\left(\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right) - \frac{x}{t \cdot z - x}\right) \cdot \frac{1}{x + 1}\\
\mathbf{elif}\;\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1} \le 3.6817545759347375 \cdot 10^{290}:\\
\;\;\;\;\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r706489 = x;
double r706490 = y;
double r706491 = z;
double r706492 = r706490 * r706491;
double r706493 = r706492 - r706489;
double r706494 = t;
double r706495 = r706494 * r706491;
double r706496 = r706495 - r706489;
double r706497 = r706493 / r706496;
double r706498 = r706489 + r706497;
double r706499 = 1.0;
double r706500 = r706489 + r706499;
double r706501 = r706498 / r706500;
return r706501;
}
double f(double x, double y, double z, double t) {
double r706502 = x;
double r706503 = y;
double r706504 = z;
double r706505 = r706503 * r706504;
double r706506 = r706505 - r706502;
double r706507 = t;
double r706508 = r706507 * r706504;
double r706509 = r706508 - r706502;
double r706510 = r706506 / r706509;
double r706511 = r706502 + r706510;
double r706512 = 1.0;
double r706513 = r706502 + r706512;
double r706514 = r706511 / r706513;
double r706515 = -inf.0;
bool r706516 = r706514 <= r706515;
double r706517 = r706503 / r706509;
double r706518 = fma(r706517, r706504, r706502);
double r706519 = r706502 / r706509;
double r706520 = r706518 - r706519;
double r706521 = 1.0;
double r706522 = r706521 / r706513;
double r706523 = r706520 * r706522;
double r706524 = 3.6817545759347375e+290;
bool r706525 = r706514 <= r706524;
double r706526 = r706503 / r706507;
double r706527 = r706502 + r706526;
double r706528 = r706527 / r706513;
double r706529 = r706525 ? r706514 : r706528;
double r706530 = r706516 ? r706523 : r706529;
return r706530;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.1 |
|---|---|
| Target | 0.3 |
| Herbie | 1.4 |
if (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) < -inf.0Initial program 64.0
rmApplied div-sub64.0
Applied associate-+r-64.0
Simplified5.3
rmApplied div-inv5.4
if -inf.0 < (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) < 3.6817545759347375e+290Initial program 0.6
if 3.6817545759347375e+290 < (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) Initial program 61.7
Taylor expanded around inf 9.9
Final simplification1.4
herbie shell --seed 2020062 +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)))