\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\begin{array}{l}
\mathbf{if}\;y \le -1.367949010508958 \cdot 10^{+154}:\\
\;\;\;\;-1\\
\mathbf{elif}\;y \le -3.564256890674104 \cdot 10^{-158}:\\
\;\;\;\;-\left(\frac{y \cdot y}{x \cdot x + y \cdot y} - \frac{1}{\frac{x \cdot x + y \cdot y}{x \cdot x}}\right)\\
\mathbf{elif}\;y \le 1.8050510261731553 \cdot 10^{-162}:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;-\left(\frac{y \cdot y}{x \cdot x + y \cdot y} - \frac{1}{\frac{x \cdot x + y \cdot y}{x \cdot x}}\right)\\
\end{array}double f(double x, double y) {
double r8070753 = x;
double r8070754 = y;
double r8070755 = r8070753 - r8070754;
double r8070756 = r8070753 + r8070754;
double r8070757 = r8070755 * r8070756;
double r8070758 = r8070753 * r8070753;
double r8070759 = r8070754 * r8070754;
double r8070760 = r8070758 + r8070759;
double r8070761 = r8070757 / r8070760;
return r8070761;
}
double f(double x, double y) {
double r8070762 = y;
double r8070763 = -1.367949010508958e+154;
bool r8070764 = r8070762 <= r8070763;
double r8070765 = -1.0;
double r8070766 = -3.564256890674104e-158;
bool r8070767 = r8070762 <= r8070766;
double r8070768 = r8070762 * r8070762;
double r8070769 = x;
double r8070770 = r8070769 * r8070769;
double r8070771 = r8070770 + r8070768;
double r8070772 = r8070768 / r8070771;
double r8070773 = 1.0;
double r8070774 = r8070771 / r8070770;
double r8070775 = r8070773 / r8070774;
double r8070776 = r8070772 - r8070775;
double r8070777 = -r8070776;
double r8070778 = 1.8050510261731553e-162;
bool r8070779 = r8070762 <= r8070778;
double r8070780 = r8070779 ? r8070773 : r8070777;
double r8070781 = r8070767 ? r8070777 : r8070780;
double r8070782 = r8070764 ? r8070765 : r8070781;
return r8070782;
}




Bits error versus x




Bits error versus y
Results
| Original | 19.5 |
|---|---|
| Target | 0.1 |
| Herbie | 5.2 |
if y < -1.367949010508958e+154Initial program 63.6
Simplified63.6
Taylor expanded around inf 0
if -1.367949010508958e+154 < y < -3.564256890674104e-158 or 1.8050510261731553e-162 < y Initial program 0.0
Simplified0.0
rmApplied div-sub0.0
rmApplied clear-num0.0
if -3.564256890674104e-158 < y < 1.8050510261731553e-162Initial program 29.3
Simplified29.3
Taylor expanded around 0 16.2
Final simplification5.2
herbie shell --seed 2019158
(FPCore (x y)
:name "Kahan p9 Example"
:pre (and (< 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))))