\sqrt{x \cdot x + y \cdot y}\begin{array}{l}
\mathbf{if}\;x \le -8.953163933293596454341424469878526728026 \cdot 10^{119}:\\
\;\;\;\;-x\\
\mathbf{elif}\;x \le 2.93160876788335701324895973715263720284 \cdot 10^{138}:\\
\;\;\;\;\sqrt{x \cdot x + y \cdot y}\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y) {
double r615340 = x;
double r615341 = r615340 * r615340;
double r615342 = y;
double r615343 = r615342 * r615342;
double r615344 = r615341 + r615343;
double r615345 = sqrt(r615344);
return r615345;
}
double f(double x, double y) {
double r615346 = x;
double r615347 = -8.953163933293596e+119;
bool r615348 = r615346 <= r615347;
double r615349 = -r615346;
double r615350 = 2.931608767883357e+138;
bool r615351 = r615346 <= r615350;
double r615352 = r615346 * r615346;
double r615353 = y;
double r615354 = r615353 * r615353;
double r615355 = r615352 + r615354;
double r615356 = sqrt(r615355);
double r615357 = r615351 ? r615356 : r615346;
double r615358 = r615348 ? r615349 : r615357;
return r615358;
}




Bits error versus x




Bits error versus y
Results
| Original | 31.2 |
|---|---|
| Target | 17.6 |
| Herbie | 17.5 |
if x < -8.953163933293596e+119Initial program 55.7
Taylor expanded around -inf 9.5
Simplified9.5
if -8.953163933293596e+119 < x < 2.931608767883357e+138Initial program 20.9
if 2.931608767883357e+138 < x Initial program 59.0
Taylor expanded around inf 8.0
Final simplification17.5
herbie shell --seed 2019303
(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))))