1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -11594563728487306:\\
\;\;\;\;x + \mathsf{fma}\left(\frac{1}{y}, \frac{x}{y}, 1 \cdot \left(-\frac{x}{y}\right)\right)\\
\mathbf{elif}\;y \le 863065781124297844139753472:\\
\;\;\;\;\mathsf{fma}\left(y \cdot \left(\left(y - 1\right) \cdot \frac{1}{\left(y - 1\right) \cdot \left(y + 1\right)}\right), x - 1, 1\right)\\
\mathbf{else}:\\
\;\;\;\;x + \mathsf{fma}\left(\frac{1}{y}, \frac{x}{y}, 1 \cdot \left(-\frac{x}{y}\right)\right)\\
\end{array}double f(double x, double y) {
double r28544069 = 1.0;
double r28544070 = x;
double r28544071 = r28544069 - r28544070;
double r28544072 = y;
double r28544073 = r28544071 * r28544072;
double r28544074 = r28544072 + r28544069;
double r28544075 = r28544073 / r28544074;
double r28544076 = r28544069 - r28544075;
return r28544076;
}
double f(double x, double y) {
double r28544077 = y;
double r28544078 = -11594563728487306.0;
bool r28544079 = r28544077 <= r28544078;
double r28544080 = x;
double r28544081 = 1.0;
double r28544082 = r28544081 / r28544077;
double r28544083 = r28544080 / r28544077;
double r28544084 = -r28544083;
double r28544085 = r28544081 * r28544084;
double r28544086 = fma(r28544082, r28544083, r28544085);
double r28544087 = r28544080 + r28544086;
double r28544088 = 8.630657811242978e+26;
bool r28544089 = r28544077 <= r28544088;
double r28544090 = r28544077 - r28544081;
double r28544091 = 1.0;
double r28544092 = r28544077 + r28544081;
double r28544093 = r28544090 * r28544092;
double r28544094 = r28544091 / r28544093;
double r28544095 = r28544090 * r28544094;
double r28544096 = r28544077 * r28544095;
double r28544097 = r28544080 - r28544081;
double r28544098 = fma(r28544096, r28544097, r28544081);
double r28544099 = r28544089 ? r28544098 : r28544087;
double r28544100 = r28544079 ? r28544087 : r28544099;
return r28544100;
}




Bits error versus x




Bits error versus y
| Original | 22.7 |
|---|---|
| Target | 0.2 |
| Herbie | 7.8 |
if y < -11594563728487306.0 or 8.630657811242978e+26 < y Initial program 47.0
Simplified29.6
rmApplied div-inv29.7
Taylor expanded around inf 15.3
Simplified15.3
if -11594563728487306.0 < y < 8.630657811242978e+26Initial program 1.4
Simplified1.3
rmApplied div-inv1.3
rmApplied flip-+1.3
Applied associate-/r/1.3
Simplified1.3
Final simplification7.8
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, D"
:herbie-target
(if (< y -3693.8482788297247) (- (/ 1.0 y) (- (/ x y) x)) (if (< y 6799310503.41891) (- 1.0 (/ (* (- 1.0 x) y) (+ y 1.0))) (- (/ 1.0 y) (- (/ x y) x))))
(- 1.0 (/ (* (- 1.0 x) y) (+ y 1.0))))