\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\begin{array}{l}
\mathbf{if}\;y \le -1.3404988451868662 \cdot 10^{154}:\\
\;\;\;\;-1\\
\mathbf{elif}\;y \le -5.69285947515511926 \cdot 10^{-160}:\\
\;\;\;\;\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\\
\mathbf{elif}\;y \le 1.2490407105203886 \cdot 10^{-166}:\\
\;\;\;\;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 r95130 = x;
double r95131 = y;
double r95132 = r95130 - r95131;
double r95133 = r95130 + r95131;
double r95134 = r95132 * r95133;
double r95135 = r95130 * r95130;
double r95136 = r95131 * r95131;
double r95137 = r95135 + r95136;
double r95138 = r95134 / r95137;
return r95138;
}
double f(double x, double y) {
double r95139 = y;
double r95140 = -1.3404988451868662e+154;
bool r95141 = r95139 <= r95140;
double r95142 = -1.0;
double r95143 = -5.692859475155119e-160;
bool r95144 = r95139 <= r95143;
double r95145 = x;
double r95146 = r95145 - r95139;
double r95147 = r95145 + r95139;
double r95148 = r95146 * r95147;
double r95149 = r95145 * r95145;
double r95150 = r95139 * r95139;
double r95151 = r95149 + r95150;
double r95152 = r95148 / r95151;
double r95153 = 1.2490407105203886e-166;
bool r95154 = r95139 <= r95153;
double r95155 = 1.0;
double r95156 = r95154 ? r95155 : r95152;
double r95157 = r95144 ? r95152 : r95156;
double r95158 = r95141 ? r95142 : r95157;
return r95158;
}




Bits error versus x




Bits error versus y
Results
| Original | 20.2 |
|---|---|
| Target | 0.0 |
| Herbie | 5.0 |
if y < -1.3404988451868662e+154Initial program 64.0
Taylor expanded around 0 0
if -1.3404988451868662e+154 < y < -5.692859475155119e-160 or 1.2490407105203886e-166 < y Initial program 0.2
if -5.692859475155119e-160 < y < 1.2490407105203886e-166Initial program 30.1
Taylor expanded around inf 15.2
Final simplification5.0
herbie shell --seed 2020064
(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))))