\sqrt{x \cdot x + y}\begin{array}{l}
\mathbf{if}\;x \le -1.36386960173928627200627038857438869043 \cdot 10^{154}:\\
\;\;\;\;-\left(x + \frac{1}{2} \cdot \frac{y}{x}\right)\\
\mathbf{elif}\;x \le 1.91813475462953226773563982297224491741 \cdot 10^{118}:\\
\;\;\;\;\sqrt{x \cdot x + y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{1}{2} \cdot \frac{y}{x}\\
\end{array}double f(double x, double y) {
double r303554 = x;
double r303555 = r303554 * r303554;
double r303556 = y;
double r303557 = r303555 + r303556;
double r303558 = sqrt(r303557);
return r303558;
}
double f(double x, double y) {
double r303559 = x;
double r303560 = -1.3638696017392863e+154;
bool r303561 = r303559 <= r303560;
double r303562 = 0.5;
double r303563 = y;
double r303564 = r303563 / r303559;
double r303565 = r303562 * r303564;
double r303566 = r303559 + r303565;
double r303567 = -r303566;
double r303568 = 1.9181347546295323e+118;
bool r303569 = r303559 <= r303568;
double r303570 = r303559 * r303559;
double r303571 = r303570 + r303563;
double r303572 = sqrt(r303571);
double r303573 = r303569 ? r303572 : r303566;
double r303574 = r303561 ? r303567 : r303573;
return r303574;
}




Bits error versus x




Bits error versus y
Results
| Original | 21.4 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if x < -1.3638696017392863e+154Initial program 64.0
Taylor expanded around -inf 0
if -1.3638696017392863e+154 < x < 1.9181347546295323e+118Initial program 0.0
if 1.9181347546295323e+118 < x Initial program 52.4
Taylor expanded around inf 0.3
Final simplification0.1
herbie shell --seed 2019298
(FPCore (x y)
:name "Linear.Quaternion:$clog from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< x -1.5097698010472593e153) (- (+ (* 0.5 (/ y x)) x)) (if (< x 5.5823995511225407e57) (sqrt (+ (* x x) y)) (+ (* 0.5 (/ y x)) x)))
(sqrt (+ (* x x) y)))