\sqrt{x \cdot x + y \cdot y}\begin{array}{l}
\mathbf{if}\;x \le -4.019634613598924703951801238213161238145 \cdot 10^{134}:\\
\;\;\;\;-x\\
\mathbf{elif}\;x \le 1.407306448838225519879757223457047572583 \cdot 10^{108}:\\
\;\;\;\;\sqrt{x \cdot x + y \cdot y}\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y) {
double r460210 = x;
double r460211 = r460210 * r460210;
double r460212 = y;
double r460213 = r460212 * r460212;
double r460214 = r460211 + r460213;
double r460215 = sqrt(r460214);
return r460215;
}
double f(double x, double y) {
double r460216 = x;
double r460217 = -4.019634613598925e+134;
bool r460218 = r460216 <= r460217;
double r460219 = -r460216;
double r460220 = 1.4073064488382255e+108;
bool r460221 = r460216 <= r460220;
double r460222 = r460216 * r460216;
double r460223 = y;
double r460224 = r460223 * r460223;
double r460225 = r460222 + r460224;
double r460226 = sqrt(r460225);
double r460227 = r460221 ? r460226 : r460216;
double r460228 = r460218 ? r460219 : r460227;
return r460228;
}




Bits error versus x




Bits error versus y
Results
| Original | 31.5 |
|---|---|
| Target | 17.6 |
| Herbie | 17.5 |
if x < -4.019634613598925e+134Initial program 58.4
Taylor expanded around -inf 8.5
Simplified8.5
if -4.019634613598925e+134 < x < 1.4073064488382255e+108Initial program 21.2
if 1.4073064488382255e+108 < x Initial program 52.1
Taylor expanded around inf 9.5
Final simplification17.5
herbie shell --seed 2019208
(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))))