1 - \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}\begin{array}{l}
\mathbf{if}\;x \le -0.00202528673630512912051671037261257879436:\\
\;\;\;\;\sqrt{\frac{\sqrt{\mathsf{fma}\left(-0.5, 1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}, 1 \cdot 1\right)} \cdot \sqrt{\left(\sqrt[3]{\mathsf{fma}\left(-0.5, 1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}, 1 \cdot 1\right)} \cdot \sqrt[3]{\mathsf{fma}\left(-0.5, 1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}, 1 \cdot 1\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(-0.5, 1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}, 1 \cdot 1\right)}}}{1 + \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}}} \cdot \sqrt{\frac{\mathsf{fma}\left(-0.5, 1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}, 1 \cdot 1\right)}{1 + \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}}}\\
\mathbf{elif}\;x \le 7.537839544262187789838702833833394834073 \cdot 10^{-4}:\\
\;\;\;\;\frac{\mathsf{fma}\left(0.25, \frac{{x}^{2}}{{\left(\sqrt{1}\right)}^{3}}, 0.5 - \mathsf{fma}\left(0.5, \frac{1}{\sqrt{1}}, 0.1875 \cdot \frac{{x}^{4}}{{\left(\sqrt{1}\right)}^{5}}\right)\right)}{1 + \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{\sqrt{\mathsf{fma}\left(-0.5, 1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}, 1 \cdot 1\right)} \cdot \sqrt{\mathsf{fma}\left(-0.5, 1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}, 1 \cdot 1\right)}}{1 + \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}}} \cdot \sqrt{\frac{\mathsf{fma}\left(-0.5, 1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}, 1 \cdot 1\right)}{1 + \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}}}\\
\end{array}double f(double x) {
double r338400 = 1.0;
double r338401 = 0.5;
double r338402 = x;
double r338403 = hypot(r338400, r338402);
double r338404 = r338400 / r338403;
double r338405 = r338400 + r338404;
double r338406 = r338401 * r338405;
double r338407 = sqrt(r338406);
double r338408 = r338400 - r338407;
return r338408;
}
double f(double x) {
double r338409 = x;
double r338410 = -0.002025286736305129;
bool r338411 = r338409 <= r338410;
double r338412 = 0.5;
double r338413 = -r338412;
double r338414 = 1.0;
double r338415 = hypot(r338414, r338409);
double r338416 = r338414 / r338415;
double r338417 = r338414 + r338416;
double r338418 = r338414 * r338414;
double r338419 = fma(r338413, r338417, r338418);
double r338420 = sqrt(r338419);
double r338421 = cbrt(r338419);
double r338422 = r338421 * r338421;
double r338423 = r338422 * r338421;
double r338424 = sqrt(r338423);
double r338425 = r338420 * r338424;
double r338426 = r338412 * r338417;
double r338427 = sqrt(r338426);
double r338428 = r338414 + r338427;
double r338429 = r338425 / r338428;
double r338430 = sqrt(r338429);
double r338431 = r338419 / r338428;
double r338432 = sqrt(r338431);
double r338433 = r338430 * r338432;
double r338434 = 0.0007537839544262188;
bool r338435 = r338409 <= r338434;
double r338436 = 0.25;
double r338437 = 2.0;
double r338438 = pow(r338409, r338437);
double r338439 = sqrt(r338414);
double r338440 = 3.0;
double r338441 = pow(r338439, r338440);
double r338442 = r338438 / r338441;
double r338443 = 1.0;
double r338444 = r338443 / r338439;
double r338445 = 0.1875;
double r338446 = 4.0;
double r338447 = pow(r338409, r338446);
double r338448 = 5.0;
double r338449 = pow(r338439, r338448);
double r338450 = r338447 / r338449;
double r338451 = r338445 * r338450;
double r338452 = fma(r338412, r338444, r338451);
double r338453 = r338412 - r338452;
double r338454 = fma(r338436, r338442, r338453);
double r338455 = r338454 / r338428;
double r338456 = r338420 * r338420;
double r338457 = r338456 / r338428;
double r338458 = sqrt(r338457);
double r338459 = r338458 * r338432;
double r338460 = r338435 ? r338455 : r338459;
double r338461 = r338411 ? r338433 : r338460;
return r338461;
}



Bits error versus x
if x < -0.002025286736305129Initial program 1.1
rmApplied flip--1.1
Simplified0.1
rmApplied add-sqr-sqrt0.1
rmApplied add-sqr-sqrt0.1
rmApplied add-cube-cbrt0.1
if -0.002025286736305129 < x < 0.0007537839544262188Initial program 30.4
rmApplied flip--30.4
Simplified30.4
Taylor expanded around 0 30.4
Simplified0.3
if 0.0007537839544262188 < x Initial program 1.1
rmApplied flip--1.1
Simplified0.1
rmApplied add-sqr-sqrt0.1
rmApplied add-sqr-sqrt0.1
Final simplification0.2
herbie shell --seed 2019347 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
:precision binary64
(- 1 (sqrt (* 0.5 (+ 1 (/ 1 (hypot 1 x)))))))