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.0000000000000044:\\
\;\;\;\;\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(1, 1, \left(-0.5\right) \cdot \left(1 + \frac{1}{\left(\sqrt[3]{\mathsf{hypot}\left(1, x\right)} \cdot \sqrt[3]{\mathsf{hypot}\left(1, x\right)}\right) \cdot \sqrt[3]{\mathsf{hypot}\left(1, x\right)}}\right)\right)}{1 + \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}}\\
\end{array}double f(double x) {
double r282768 = 1.0;
double r282769 = 0.5;
double r282770 = x;
double r282771 = hypot(r282768, r282770);
double r282772 = r282768 / r282771;
double r282773 = r282768 + r282772;
double r282774 = r282769 * r282773;
double r282775 = sqrt(r282774);
double r282776 = r282768 - r282775;
return r282776;
}
double f(double x) {
double r282777 = 1.0;
double r282778 = x;
double r282779 = hypot(r282777, r282778);
double r282780 = 1.0000000000000044;
bool r282781 = r282779 <= r282780;
double r282782 = 0.25;
double r282783 = 2.0;
double r282784 = pow(r282778, r282783);
double r282785 = sqrt(r282777);
double r282786 = 3.0;
double r282787 = pow(r282785, r282786);
double r282788 = r282784 / r282787;
double r282789 = 0.5;
double r282790 = 1.0;
double r282791 = r282790 / r282785;
double r282792 = 0.1875;
double r282793 = 4.0;
double r282794 = pow(r282778, r282793);
double r282795 = 5.0;
double r282796 = pow(r282785, r282795);
double r282797 = r282794 / r282796;
double r282798 = r282792 * r282797;
double r282799 = fma(r282789, r282791, r282798);
double r282800 = r282789 - r282799;
double r282801 = fma(r282782, r282788, r282800);
double r282802 = r282777 / r282779;
double r282803 = r282777 + r282802;
double r282804 = r282789 * r282803;
double r282805 = sqrt(r282804);
double r282806 = r282777 + r282805;
double r282807 = r282801 / r282806;
double r282808 = -r282789;
double r282809 = cbrt(r282779);
double r282810 = r282809 * r282809;
double r282811 = r282810 * r282809;
double r282812 = r282777 / r282811;
double r282813 = r282777 + r282812;
double r282814 = r282808 * r282813;
double r282815 = fma(r282777, r282777, r282814);
double r282816 = r282815 / r282806;
double r282817 = r282781 ? r282807 : r282816;
return r282817;
}



Bits error versus x
if (hypot 1.0 x) < 1.0000000000000044Initial program 29.0
rmApplied flip--29.0
Simplified29.0
Taylor expanded around 0 29.0
Simplified0.0
if 1.0000000000000044 < (hypot 1.0 x) Initial program 1.4
rmApplied flip--1.4
Simplified0.5
rmApplied add-cube-cbrt0.5
Final simplification0.3
herbie shell --seed 2020064 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
:precision binary64
(- 1 (sqrt (* 0.5 (+ 1 (/ 1 (hypot 1 x)))))))