\sqrt{x \cdot x + y}\begin{array}{l}
\mathbf{if}\;x \le -1.380447448834878 \cdot 10^{154}:\\
\;\;\;\;-\left(x + \frac{1}{2} \cdot \frac{y}{x}\right)\\
\mathbf{elif}\;x \le 1.56561154983368585 \cdot 10^{62}:\\
\;\;\;\;\sqrt{x \cdot x + y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{1}{2} \cdot \frac{y}{x}\\
\end{array}double f(double x, double y) {
double r596830 = x;
double r596831 = r596830 * r596830;
double r596832 = y;
double r596833 = r596831 + r596832;
double r596834 = sqrt(r596833);
return r596834;
}
double f(double x, double y) {
double r596835 = x;
double r596836 = -1.380447448834878e+154;
bool r596837 = r596835 <= r596836;
double r596838 = 0.5;
double r596839 = y;
double r596840 = r596839 / r596835;
double r596841 = r596838 * r596840;
double r596842 = r596835 + r596841;
double r596843 = -r596842;
double r596844 = 1.5656115498336859e+62;
bool r596845 = r596835 <= r596844;
double r596846 = r596835 * r596835;
double r596847 = r596846 + r596839;
double r596848 = sqrt(r596847);
double r596849 = r596845 ? r596848 : r596842;
double r596850 = r596837 ? r596843 : r596849;
return r596850;
}




Bits error versus x




Bits error versus y
Results
| Original | 21.2 |
|---|---|
| Target | 0.5 |
| Herbie | 0.5 |
if x < -1.380447448834878e+154Initial program 64.0
Taylor expanded around -inf 0.0
if -1.380447448834878e+154 < x < 1.5656115498336859e+62Initial program 0.0
if 1.5656115498336859e+62 < x Initial program 41.5
Taylor expanded around inf 1.8
Final simplification0.5
herbie shell --seed 2020035
(FPCore (x y)
:name "Linear.Quaternion:$clog from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< x -1.5097698010472593e+153) (- (+ (* 0.5 (/ y x)) x)) (if (< x 5.582399551122541e+57) (sqrt (+ (* x x) y)) (+ (* 0.5 (/ y x)) x)))
(sqrt (+ (* x x) y)))