\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\begin{array}{l}
\mathbf{if}\;y \le -6.684928343955356131371166176678318827411 \cdot 10^{152}:\\
\;\;\;\;-1\\
\mathbf{elif}\;y \le -5.83212255427073711513933578216523599775 \cdot 10^{-161} \lor \neg \left(y \le 8.828733525662879851097652584775790113009 \cdot 10^{-187}\right):\\
\;\;\;\;\frac{\left(x - y\right) \cdot \left(y + x\right)}{y \cdot y + x \cdot x}\\
\mathbf{else}:\\
\;\;\;\;1\\
\end{array}double f(double x, double y) {
double r67225 = x;
double r67226 = y;
double r67227 = r67225 - r67226;
double r67228 = r67225 + r67226;
double r67229 = r67227 * r67228;
double r67230 = r67225 * r67225;
double r67231 = r67226 * r67226;
double r67232 = r67230 + r67231;
double r67233 = r67229 / r67232;
return r67233;
}
double f(double x, double y) {
double r67234 = y;
double r67235 = -6.684928343955356e+152;
bool r67236 = r67234 <= r67235;
double r67237 = -1.0;
double r67238 = -5.832122554270737e-161;
bool r67239 = r67234 <= r67238;
double r67240 = 8.82873352566288e-187;
bool r67241 = r67234 <= r67240;
double r67242 = !r67241;
bool r67243 = r67239 || r67242;
double r67244 = x;
double r67245 = r67244 - r67234;
double r67246 = r67234 + r67244;
double r67247 = r67245 * r67246;
double r67248 = r67234 * r67234;
double r67249 = r67244 * r67244;
double r67250 = r67248 + r67249;
double r67251 = r67247 / r67250;
double r67252 = 1.0;
double r67253 = r67243 ? r67251 : r67252;
double r67254 = r67236 ? r67237 : r67253;
return r67254;
}




Bits error versus x




Bits error versus y
Results
| Original | 20.3 |
|---|---|
| Target | 0.0 |
| Herbie | 4.9 |
if y < -6.684928343955356e+152Initial program 63.4
Taylor expanded around 0 0
if -6.684928343955356e+152 < y < -5.832122554270737e-161 or 8.82873352566288e-187 < y Initial program 1.6
if -5.832122554270737e-161 < y < 8.82873352566288e-187Initial program 29.3
Taylor expanded around inf 13.7
Final simplification4.9
herbie shell --seed 2019196
(FPCore (x y)
:name "Kahan p9 Example"
:pre (and (< 0.0 x 1.0) (< y 1.0))
:herbie-target
(if (< 0.5 (fabs (/ x y)) 2.0) (/ (* (- x y) (+ x y)) (+ (* x x) (* y y))) (- 1.0 (/ 2.0 (+ 1.0 (* (/ x y) (/ x y))))))
(/ (* (- x y) (+ x y)) (+ (* x x) (* y y))))