\sqrt{x \cdot x + y \cdot y}\begin{array}{l}
\mathbf{if}\;x \le -5.292452664608308748326184357539029329404 \cdot 10^{126}:\\
\;\;\;\;-x\\
\mathbf{elif}\;x \le -3.687297931379775690416299346624397658835 \cdot 10^{-267}:\\
\;\;\;\;\sqrt{x \cdot x + y \cdot y}\\
\mathbf{elif}\;x \le 1.914133431995725133760392243420299124786 \cdot 10^{-220}:\\
\;\;\;\;y\\
\mathbf{elif}\;x \le 1.921239608950813885870067735992694561728 \cdot 10^{104}:\\
\;\;\;\;\sqrt{x \cdot x + y \cdot y}\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y) {
double r529531 = x;
double r529532 = r529531 * r529531;
double r529533 = y;
double r529534 = r529533 * r529533;
double r529535 = r529532 + r529534;
double r529536 = sqrt(r529535);
return r529536;
}
double f(double x, double y) {
double r529537 = x;
double r529538 = -5.292452664608309e+126;
bool r529539 = r529537 <= r529538;
double r529540 = -r529537;
double r529541 = -3.6872979313797757e-267;
bool r529542 = r529537 <= r529541;
double r529543 = r529537 * r529537;
double r529544 = y;
double r529545 = r529544 * r529544;
double r529546 = r529543 + r529545;
double r529547 = sqrt(r529546);
double r529548 = 1.914133431995725e-220;
bool r529549 = r529537 <= r529548;
double r529550 = 1.921239608950814e+104;
bool r529551 = r529537 <= r529550;
double r529552 = r529551 ? r529547 : r529537;
double r529553 = r529549 ? r529544 : r529552;
double r529554 = r529542 ? r529547 : r529553;
double r529555 = r529539 ? r529540 : r529554;
return r529555;
}




Bits error versus x




Bits error versus y
Results
| Original | 31.5 |
|---|---|
| Target | 17.6 |
| Herbie | 17.9 |
if x < -5.292452664608309e+126Initial program 57.1
Taylor expanded around -inf 8.8
Simplified8.8
if -5.292452664608309e+126 < x < -3.6872979313797757e-267 or 1.914133431995725e-220 < x < 1.921239608950814e+104Initial program 19.7
if -3.6872979313797757e-267 < x < 1.914133431995725e-220Initial program 30.3
Taylor expanded around 0 32.9
if 1.921239608950814e+104 < x Initial program 51.4
Taylor expanded around inf 9.8
Final simplification17.9
herbie shell --seed 2019306
(FPCore (x y)
:name "Data.Octree.Internal:octantDistance from Octree-0.5.4.2"
:precision binary64
:herbie-target
(if (< x -1.123695082659983e145) (- x) (if (< x 1.11655762118336204e93) (sqrt (+ (* x x) (* y y))) x))
(sqrt (+ (* x x) (* y y))))