1 - \sqrt{0.5 \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.00000006380900186:\\
\;\;\;\;\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}:\\
\;\;\;\;\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 r266412 = 1.0;
double r266413 = 0.5;
double r266414 = x;
double r266415 = hypot(r266412, r266414);
double r266416 = r266412 / r266415;
double r266417 = r266412 + r266416;
double r266418 = r266413 * r266417;
double r266419 = sqrt(r266418);
double r266420 = r266412 - r266419;
return r266420;
}
double f(double x) {
double r266421 = 1.0;
double r266422 = x;
double r266423 = hypot(r266421, r266422);
double r266424 = 1.0000000638090019;
bool r266425 = r266423 <= r266424;
double r266426 = 0.25;
double r266427 = 2.0;
double r266428 = pow(r266422, r266427);
double r266429 = sqrt(r266421);
double r266430 = 3.0;
double r266431 = pow(r266429, r266430);
double r266432 = r266428 / r266431;
double r266433 = 0.5;
double r266434 = 1.0;
double r266435 = r266434 / r266429;
double r266436 = 0.1875;
double r266437 = 4.0;
double r266438 = pow(r266422, r266437);
double r266439 = 5.0;
double r266440 = pow(r266429, r266439);
double r266441 = r266438 / r266440;
double r266442 = r266436 * r266441;
double r266443 = fma(r266433, r266435, r266442);
double r266444 = r266433 - r266443;
double r266445 = fma(r266426, r266432, r266444);
double r266446 = r266421 / r266423;
double r266447 = r266421 + r266446;
double r266448 = r266433 * r266447;
double r266449 = sqrt(r266448);
double r266450 = r266421 + r266449;
double r266451 = r266445 / r266450;
double r266452 = -r266433;
double r266453 = r266421 * r266421;
double r266454 = fma(r266452, r266447, r266453);
double r266455 = r266454 / r266450;
double r266456 = r266425 ? r266451 : r266455;
return r266456;
}



Bits error versus x
if (hypot 1.0 x) < 1.0000000638090019Initial program 30.5
rmApplied flip--30.5
Simplified30.5
Taylor expanded around 0 30.5
Simplified0.2
if 1.0000000638090019 < (hypot 1.0 x) Initial program 1.1
rmApplied flip--1.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2020035 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
:precision binary64
(- 1 (sqrt (* 0.5 (+ 1 (/ 1 (hypot 1 x)))))))