\sqrt{x \cdot x + y}\begin{array}{l}
\mathbf{if}\;x \le -1.33039994920999637206017606321533586726 \cdot 10^{154}:\\
\;\;\;\;\frac{-\frac{y}{x}}{2} - x\\
\mathbf{elif}\;x \le 6.063771965228404863100273443341838455211 \cdot 10^{84}:\\
\;\;\;\;\sqrt{x \cdot x + y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\frac{y}{x}}{2}\\
\end{array}double f(double x, double y) {
double r325678 = x;
double r325679 = r325678 * r325678;
double r325680 = y;
double r325681 = r325679 + r325680;
double r325682 = sqrt(r325681);
return r325682;
}
double f(double x, double y) {
double r325683 = x;
double r325684 = -1.3303999492099964e+154;
bool r325685 = r325683 <= r325684;
double r325686 = y;
double r325687 = r325686 / r325683;
double r325688 = -r325687;
double r325689 = 2.0;
double r325690 = r325688 / r325689;
double r325691 = r325690 - r325683;
double r325692 = 6.063771965228405e+84;
bool r325693 = r325683 <= r325692;
double r325694 = r325683 * r325683;
double r325695 = r325694 + r325686;
double r325696 = sqrt(r325695);
double r325697 = r325687 / r325689;
double r325698 = r325683 + r325697;
double r325699 = r325693 ? r325696 : r325698;
double r325700 = r325685 ? r325691 : r325699;
return r325700;
}




Bits error versus x




Bits error versus y
Results
| Original | 20.9 |
|---|---|
| Target | 0.5 |
| Herbie | 0.3 |
if x < -1.3303999492099964e+154Initial program 64.0
Taylor expanded around -inf 0
Simplified0
if -1.3303999492099964e+154 < x < 6.063771965228405e+84Initial program 0.0
if 6.063771965228405e+84 < x Initial program 43.9
Taylor expanded around inf 1.1
Simplified1.1
Final simplification0.3
herbie shell --seed 2019303
(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)))