\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\begin{array}{l}
\mathbf{if}\;y \le -1.316818702600376 \cdot 10^{-118}:\\
\;\;\;\;-1\\
\mathbf{elif}\;y \le 1.5133568360584157 \cdot 10^{-199}:\\
\;\;\;\;1\\
\mathbf{elif}\;y \le 1.26512110104530408 \cdot 10^{-172}:\\
\;\;\;\;-1\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\\
\end{array}double f(double x, double y) {
double r94329 = x;
double r94330 = y;
double r94331 = r94329 - r94330;
double r94332 = r94329 + r94330;
double r94333 = r94331 * r94332;
double r94334 = r94329 * r94329;
double r94335 = r94330 * r94330;
double r94336 = r94334 + r94335;
double r94337 = r94333 / r94336;
return r94337;
}
double f(double x, double y) {
double r94338 = y;
double r94339 = -1.316818702600376e-118;
bool r94340 = r94338 <= r94339;
double r94341 = -1.0;
double r94342 = 1.5133568360584157e-199;
bool r94343 = r94338 <= r94342;
double r94344 = 1.0;
double r94345 = 1.2651211010453041e-172;
bool r94346 = r94338 <= r94345;
double r94347 = x;
double r94348 = r94347 - r94338;
double r94349 = r94347 + r94338;
double r94350 = r94348 * r94349;
double r94351 = r94347 * r94347;
double r94352 = r94338 * r94338;
double r94353 = r94351 + r94352;
double r94354 = r94350 / r94353;
double r94355 = r94346 ? r94341 : r94354;
double r94356 = r94343 ? r94344 : r94355;
double r94357 = r94340 ? r94341 : r94356;
return r94357;
}




Bits error versus x




Bits error versus y
Results
| Original | 20.7 |
|---|---|
| Target | 0.1 |
| Herbie | 8.6 |
if y < -1.316818702600376e-118 or 1.5133568360584157e-199 < y < 1.2651211010453041e-172Initial program 24.0
Taylor expanded around 0 5.5
if -1.316818702600376e-118 < y < 1.5133568360584157e-199Initial program 26.3
Taylor expanded around inf 17.1
if 1.2651211010453041e-172 < y Initial program 1.8
Final simplification8.6
herbie shell --seed 2020027
(FPCore (x y)
:name "Kahan p9 Example"
:precision binary64
:pre (and (< 0.0 x 1) (< y 1))
:herbie-target
(if (< 0.5 (fabs (/ x y)) 2) (/ (* (- x y) (+ x y)) (+ (* x x) (* y y))) (- 1 (/ 2 (+ 1 (* (/ x y) (/ x y))))))
(/ (* (- x y) (+ x y)) (+ (* x x) (* y y))))