1 - \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}\begin{array}{l}
\mathbf{if}\;\mathsf{hypot}\left(1, x\right) \le 1.0000000000000007:\\
\;\;\;\;\mathsf{fma}\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right), \frac{-11}{128}, \mathsf{fma}\left(x \cdot x, \frac{1}{8}, \left(\frac{69}{1024} \cdot \left(x \cdot x\right)\right) \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\log \left(e^{1 - \left(\frac{1}{2} + \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}\right)}\right)}{1 + \frac{\sqrt{\mathsf{fma}\left(\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}, \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} \cdot \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}, \frac{1}{8}\right)}}{\sqrt{\frac{1}{4} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} \cdot \left(\frac{1}{2} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}\right)}}}\\
\end{array}double f(double x) {
double r4360405 = 1.0;
double r4360406 = 0.5;
double r4360407 = x;
double r4360408 = hypot(r4360405, r4360407);
double r4360409 = r4360405 / r4360408;
double r4360410 = r4360405 + r4360409;
double r4360411 = r4360406 * r4360410;
double r4360412 = sqrt(r4360411);
double r4360413 = r4360405 - r4360412;
return r4360413;
}
double f(double x) {
double r4360414 = 1.0;
double r4360415 = x;
double r4360416 = hypot(r4360414, r4360415);
double r4360417 = 1.0000000000000007;
bool r4360418 = r4360416 <= r4360417;
double r4360419 = r4360415 * r4360415;
double r4360420 = r4360419 * r4360419;
double r4360421 = -0.0859375;
double r4360422 = 0.125;
double r4360423 = 0.0673828125;
double r4360424 = r4360423 * r4360419;
double r4360425 = r4360424 * r4360420;
double r4360426 = fma(r4360419, r4360422, r4360425);
double r4360427 = fma(r4360420, r4360421, r4360426);
double r4360428 = 0.5;
double r4360429 = r4360428 / r4360416;
double r4360430 = r4360428 + r4360429;
double r4360431 = r4360414 - r4360430;
double r4360432 = exp(r4360431);
double r4360433 = log(r4360432);
double r4360434 = r4360429 * r4360429;
double r4360435 = fma(r4360429, r4360434, r4360422);
double r4360436 = sqrt(r4360435);
double r4360437 = 0.25;
double r4360438 = r4360428 - r4360429;
double r4360439 = r4360429 * r4360438;
double r4360440 = r4360437 - r4360439;
double r4360441 = sqrt(r4360440);
double r4360442 = r4360436 / r4360441;
double r4360443 = r4360414 + r4360442;
double r4360444 = r4360433 / r4360443;
double r4360445 = r4360418 ? r4360427 : r4360444;
return r4360445;
}



Bits error versus x
if (hypot 1 x) < 1.0000000000000007Initial program 29.9
Simplified29.9
Taylor expanded around 0 0.0
Simplified0.0
if 1.0000000000000007 < (hypot 1 x) Initial program 1.5
Simplified1.5
rmApplied flip--1.5
Simplified0.6
Simplified0.6
rmApplied flip3-+0.6
Applied sqrt-div0.6
Simplified0.6
Simplified0.6
rmApplied add-log-exp0.6
Final simplification0.3
herbie shell --seed 2019163 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
(- 1 (sqrt (* 1/2 (+ 1 (/ 1 (hypot 1 x)))))))