\sqrt{x \cdot x + y}\begin{array}{l}
\mathbf{if}\;x \le -1.36496554640706019677869997344330658994 \cdot 10^{154}:\\
\;\;\;\;-\mathsf{fma}\left(\frac{y}{x}, \frac{1}{2}, x\right)\\
\mathbf{elif}\;x \le 3.588070708117172201716955628167087287626 \cdot 10^{111}:\\
\;\;\;\;\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 r425161 = x;
double r425162 = r425161 * r425161;
double r425163 = y;
double r425164 = r425162 + r425163;
double r425165 = sqrt(r425164);
return r425165;
}
double f(double x, double y) {
double r425166 = x;
double r425167 = -1.3649655464070602e+154;
bool r425168 = r425166 <= r425167;
double r425169 = y;
double r425170 = r425169 / r425166;
double r425171 = 0.5;
double r425172 = fma(r425170, r425171, r425166);
double r425173 = -r425172;
double r425174 = 3.588070708117172e+111;
bool r425175 = r425166 <= r425174;
double r425176 = fma(r425166, r425166, r425169);
double r425177 = sqrt(r425176);
double r425178 = r425175 ? r425177 : r425172;
double r425179 = r425168 ? r425173 : r425178;
return r425179;
}




Bits error versus x




Bits error versus y
| Original | 21.4 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if x < -1.3649655464070602e+154Initial program 64.0
Simplified64.0
Taylor expanded around -inf 0
Simplified0
if -1.3649655464070602e+154 < x < 3.588070708117172e+111Initial program 0.0
Simplified0.0
if 3.588070708117172e+111 < x Initial program 51.0
Simplified51.0
Taylor expanded around inf 0.6
Simplified0.6
Final simplification0.1
herbie shell --seed 2019209 +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)))