\sqrt{x \cdot x + y}\begin{array}{l}
\mathbf{if}\;x \le -1.33806932031074013067314768498084378419 \cdot 10^{154}:\\
\;\;\;\;-\left(x + \frac{1}{2} \cdot \frac{y}{x}\right)\\
\mathbf{elif}\;x \le 6.747088751163897916312969619772228458059 \cdot 10^{113}:\\
\;\;\;\;\sqrt{x \cdot x + y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{1}{2} \cdot \frac{y}{x}\\
\end{array}double f(double x, double y) {
double r355246 = x;
double r355247 = r355246 * r355246;
double r355248 = y;
double r355249 = r355247 + r355248;
double r355250 = sqrt(r355249);
return r355250;
}
double f(double x, double y) {
double r355251 = x;
double r355252 = -1.3380693203107401e+154;
bool r355253 = r355251 <= r355252;
double r355254 = 0.5;
double r355255 = y;
double r355256 = r355255 / r355251;
double r355257 = r355254 * r355256;
double r355258 = r355251 + r355257;
double r355259 = -r355258;
double r355260 = 6.747088751163898e+113;
bool r355261 = r355251 <= r355260;
double r355262 = r355251 * r355251;
double r355263 = r355262 + r355255;
double r355264 = sqrt(r355263);
double r355265 = r355261 ? r355264 : r355258;
double r355266 = r355253 ? r355259 : r355265;
return r355266;
}




Bits error versus x




Bits error versus y
Results
| Original | 21.8 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if x < -1.3380693203107401e+154Initial program 64.0
Taylor expanded around -inf 0
if -1.3380693203107401e+154 < x < 6.747088751163898e+113Initial program 0.0
if 6.747088751163898e+113 < x Initial program 50.1
Taylor expanded around inf 0.5
Final simplification0.1
herbie shell --seed 1978988140
(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)))