\sqrt{x \cdot x + y \cdot y}\begin{array}{l}
\mathbf{if}\;x \le -6.52307626026875473 \cdot 10^{150}:\\
\;\;\;\;-x\\
\mathbf{elif}\;x \le 1.15840753764457407 \cdot 10^{105}:\\
\;\;\;\;\sqrt{x \cdot x + y \cdot y}\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y) {
double r694736 = x;
double r694737 = r694736 * r694736;
double r694738 = y;
double r694739 = r694738 * r694738;
double r694740 = r694737 + r694739;
double r694741 = sqrt(r694740);
return r694741;
}
double f(double x, double y) {
double r694742 = x;
double r694743 = -6.523076260268755e+150;
bool r694744 = r694742 <= r694743;
double r694745 = -r694742;
double r694746 = 1.158407537644574e+105;
bool r694747 = r694742 <= r694746;
double r694748 = r694742 * r694742;
double r694749 = y;
double r694750 = r694749 * r694749;
double r694751 = r694748 + r694750;
double r694752 = sqrt(r694751);
double r694753 = r694747 ? r694752 : r694742;
double r694754 = r694744 ? r694745 : r694753;
return r694754;
}




Bits error versus x




Bits error versus y
Results
| Original | 31.0 |
|---|---|
| Target | 17.5 |
| Herbie | 17.3 |
if x < -6.523076260268755e+150Initial program 63.1
Taylor expanded around -inf 7.6
Simplified7.6
if -6.523076260268755e+150 < x < 1.158407537644574e+105Initial program 20.8
if 1.158407537644574e+105 < x Initial program 51.1
Taylor expanded around inf 9.5
Final simplification17.3
herbie shell --seed 2020045
(FPCore (x y)
:name "Data.Octree.Internal:octantDistance from Octree-0.5.4.2"
:precision binary64
:herbie-target
(if (< x -1.123695082659983e+145) (- x) (if (< x 1.116557621183362e+93) (sqrt (+ (* x x) (* y y))) x))
(sqrt (+ (* x x) (* y y))))