\sqrt{x \cdot x + y \cdot y}\begin{array}{l}
\mathbf{if}\;x \le -3.678618962503878310745576389575152495213 \cdot 10^{116}:\\
\;\;\;\;-x\\
\mathbf{elif}\;x \le 5.040226837234034558242684540958197337932 \cdot 10^{87}:\\
\;\;\;\;\sqrt{y \cdot y + x \cdot x}\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y) {
double r641517 = x;
double r641518 = r641517 * r641517;
double r641519 = y;
double r641520 = r641519 * r641519;
double r641521 = r641518 + r641520;
double r641522 = sqrt(r641521);
return r641522;
}
double f(double x, double y) {
double r641523 = x;
double r641524 = -3.678618962503878e+116;
bool r641525 = r641523 <= r641524;
double r641526 = -r641523;
double r641527 = 5.0402268372340346e+87;
bool r641528 = r641523 <= r641527;
double r641529 = y;
double r641530 = r641529 * r641529;
double r641531 = r641523 * r641523;
double r641532 = r641530 + r641531;
double r641533 = sqrt(r641532);
double r641534 = r641528 ? r641533 : r641523;
double r641535 = r641525 ? r641526 : r641534;
return r641535;
}




Bits error versus x




Bits error versus y
Results
| Original | 31.2 |
|---|---|
| Target | 17.6 |
| Herbie | 17.7 |
if x < -3.678618962503878e+116Initial program 54.0
Taylor expanded around -inf 10.1
Simplified10.1
if -3.678618962503878e+116 < x < 5.0402268372340346e+87Initial program 21.0
if 5.0402268372340346e+87 < x Initial program 50.4
Taylor expanded around inf 11.3
Final simplification17.7
herbie shell --seed 2019195
(FPCore (x y)
:name "Data.Octree.Internal:octantDistance from Octree-0.5.4.2"
:herbie-target
(if (< x -1.1236950826599826e+145) (- x) (if (< x 1.116557621183362e+93) (sqrt (+ (* x x) (* y y))) x))
(sqrt (+ (* x x) (* y y))))