\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}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{2}, \frac{y}{x}, x\right)\\
\end{array}double f(double x, double y) {
double r483503 = x;
double r483504 = r483503 * r483503;
double r483505 = y;
double r483506 = r483504 + r483505;
double r483507 = sqrt(r483506);
return r483507;
}
double f(double x, double y) {
double r483508 = x;
double r483509 = -1.380447448834878e+154;
bool r483510 = r483508 <= r483509;
double r483511 = 0.5;
double r483512 = y;
double r483513 = r483512 / r483508;
double r483514 = r483511 * r483513;
double r483515 = r483508 + r483514;
double r483516 = -r483515;
double r483517 = 1.5656115498336859e+62;
bool r483518 = r483508 <= r483517;
double r483519 = r483508 * r483508;
double r483520 = r483519 + r483512;
double r483521 = sqrt(r483520);
double r483522 = fma(r483511, r483513, r483508);
double r483523 = r483518 ? r483521 : r483522;
double r483524 = r483510 ? r483516 : r483523;
return r483524;
}




Bits error versus x




Bits error versus y
| 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
Simplified1.8
Final simplification0.5
herbie shell --seed 2020035 +o rules:numerics
(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)))