1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -3086863162769103360 \lor \neg \left(y \le 166171510.4706774652004241943359375\right):\\
\;\;\;\;\mathsf{fma}\left(1, \frac{1}{y} - \frac{x}{y}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x - 1}{y + 1}, y, 1\right)\\
\end{array}double f(double x, double y) {
double r411081 = 1.0;
double r411082 = x;
double r411083 = r411081 - r411082;
double r411084 = y;
double r411085 = r411083 * r411084;
double r411086 = r411084 + r411081;
double r411087 = r411085 / r411086;
double r411088 = r411081 - r411087;
return r411088;
}
double f(double x, double y) {
double r411089 = y;
double r411090 = -3.0868631627691034e+18;
bool r411091 = r411089 <= r411090;
double r411092 = 166171510.47067747;
bool r411093 = r411089 <= r411092;
double r411094 = !r411093;
bool r411095 = r411091 || r411094;
double r411096 = 1.0;
double r411097 = 1.0;
double r411098 = r411097 / r411089;
double r411099 = x;
double r411100 = r411099 / r411089;
double r411101 = r411098 - r411100;
double r411102 = fma(r411096, r411101, r411099);
double r411103 = r411099 - r411096;
double r411104 = r411089 + r411096;
double r411105 = r411103 / r411104;
double r411106 = fma(r411105, r411089, r411096);
double r411107 = r411095 ? r411102 : r411106;
return r411107;
}




Bits error versus x




Bits error versus y
| Original | 22.8 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if y < -3.0868631627691034e+18 or 166171510.47067747 < y Initial program 46.8
Simplified30.4
Taylor expanded around inf 0.1
Simplified0.1
if -3.0868631627691034e+18 < y < 166171510.47067747Initial program 0.6
Simplified0.5
Final simplification0.3
herbie shell --seed 2019235 +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.84827882972468) (- (/ 1 y) (- (/ x y) x)) (if (< y 6799310503.41891003) (- 1 (/ (* (- 1 x) y) (+ y 1))) (- (/ 1 y) (- (/ x y) x))))
(- 1 (/ (* (- 1 x) y) (+ y 1))))