1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -172408127.577771663665771484375 \lor \neg \left(y \le 167881476.735638082027435302734375\right):\\
\;\;\;\;\frac{1}{y} + \left(x - 1 \cdot \frac{x}{y}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{y + 1}, x - 1, 1\right)\\
\end{array}double f(double x, double y) {
double r680071 = 1.0;
double r680072 = x;
double r680073 = r680071 - r680072;
double r680074 = y;
double r680075 = r680073 * r680074;
double r680076 = r680074 + r680071;
double r680077 = r680075 / r680076;
double r680078 = r680071 - r680077;
return r680078;
}
double f(double x, double y) {
double r680079 = y;
double r680080 = -172408127.57777166;
bool r680081 = r680079 <= r680080;
double r680082 = 167881476.73563808;
bool r680083 = r680079 <= r680082;
double r680084 = !r680083;
bool r680085 = r680081 || r680084;
double r680086 = 1.0;
double r680087 = r680086 / r680079;
double r680088 = x;
double r680089 = r680088 / r680079;
double r680090 = r680086 * r680089;
double r680091 = r680088 - r680090;
double r680092 = r680087 + r680091;
double r680093 = r680079 + r680086;
double r680094 = r680079 / r680093;
double r680095 = r680088 - r680086;
double r680096 = fma(r680094, r680095, r680086);
double r680097 = r680085 ? r680092 : r680096;
return r680097;
}




Bits error versus x




Bits error versus y
| Original | 22.9 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if y < -172408127.57777166 or 167881476.73563808 < y Initial program 46.2
rmApplied flip-+51.0
Applied associate-/r/51.0
Taylor expanded around inf 0.1
Simplified0.1
if -172408127.57777166 < y < 167881476.73563808Initial program 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020002 +o rules:numerics
(FPCore (x y)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, D"
:precision binary64
:herbie-target
(if (< y -3693.8482788297247) (- (/ 1 y) (- (/ x y) x)) (if (< y 6799310503.41891) (- 1 (/ (* (- 1 x) y) (+ y 1))) (- (/ 1 y) (- (/ x y) x))))
(- 1 (/ (* (- 1 x) y) (+ y 1))))