\sqrt{x \cdot x + y}\begin{array}{l}
\mathbf{if}\;x \le -1.352540539223698945459720582374994240123 \cdot 10^{154}:\\
\;\;\;\;-\mathsf{fma}\left(\frac{y}{x}, \frac{1}{2}, x\right)\\
\mathbf{elif}\;x \le 4.721377972444830028288106556093954402552 \cdot 10^{71}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(x, x, y\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{x}, \frac{1}{2}, x\right)\\
\end{array}double f(double x, double y) {
double r325682 = x;
double r325683 = r325682 * r325682;
double r325684 = y;
double r325685 = r325683 + r325684;
double r325686 = sqrt(r325685);
return r325686;
}
double f(double x, double y) {
double r325687 = x;
double r325688 = -1.352540539223699e+154;
bool r325689 = r325687 <= r325688;
double r325690 = y;
double r325691 = r325690 / r325687;
double r325692 = 0.5;
double r325693 = fma(r325691, r325692, r325687);
double r325694 = -r325693;
double r325695 = 4.72137797244483e+71;
bool r325696 = r325687 <= r325695;
double r325697 = fma(r325687, r325687, r325690);
double r325698 = sqrt(r325697);
double r325699 = r325696 ? r325698 : r325693;
double r325700 = r325689 ? r325694 : r325699;
return r325700;
}




Bits error versus x




Bits error versus y
| Original | 21.4 |
|---|---|
| Target | 0.5 |
| Herbie | 0.4 |
if x < -1.352540539223699e+154Initial program 64.0
Simplified64.0
Taylor expanded around -inf 0
Simplified0
if -1.352540539223699e+154 < x < 4.72137797244483e+71Initial program 0.0
Simplified0.0
if 4.72137797244483e+71 < x Initial program 42.1
Simplified42.1
Taylor expanded around inf 1.6
Simplified1.6
Final simplification0.4
herbie shell --seed 2019306 +o rules:numerics
(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)))