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:\\
\;\;\;\;\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) \cdot \frac{1}{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)}{\sqrt{1 + \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}}} \cdot \frac{\sqrt{1}}{\sqrt{1 + \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}}}\\
\end{array}double f(double x) {
double r351925 = 1.0;
double r351926 = 0.5;
double r351927 = x;
double r351928 = hypot(r351925, r351927);
double r351929 = r351925 / r351928;
double r351930 = r351925 + r351929;
double r351931 = r351926 * r351930;
double r351932 = sqrt(r351931);
double r351933 = r351925 - r351932;
return r351933;
}
double f(double x) {
double r351934 = 1.0;
double r351935 = x;
double r351936 = hypot(r351934, r351935);
bool r351937 = r351936 <= r351934;
double r351938 = 0.25;
double r351939 = 2.0;
double r351940 = pow(r351935, r351939);
double r351941 = sqrt(r351934);
double r351942 = 3.0;
double r351943 = pow(r351941, r351942);
double r351944 = r351940 / r351943;
double r351945 = 0.5;
double r351946 = 1.0;
double r351947 = r351946 / r351941;
double r351948 = 0.1875;
double r351949 = 4.0;
double r351950 = pow(r351935, r351949);
double r351951 = 5.0;
double r351952 = pow(r351941, r351951);
double r351953 = r351950 / r351952;
double r351954 = r351948 * r351953;
double r351955 = fma(r351945, r351947, r351954);
double r351956 = r351945 - r351955;
double r351957 = fma(r351938, r351944, r351956);
double r351958 = r351934 / r351936;
double r351959 = r351934 + r351958;
double r351960 = r351945 * r351959;
double r351961 = sqrt(r351960);
double r351962 = r351934 + r351961;
double r351963 = r351946 / r351962;
double r351964 = r351957 * r351963;
double r351965 = -r351945;
double r351966 = r351934 * r351934;
double r351967 = fma(r351965, r351959, r351966);
double r351968 = sqrt(r351962);
double r351969 = r351967 / r351968;
double r351970 = sqrt(r351946);
double r351971 = r351970 / r351968;
double r351972 = r351969 * r351971;
double r351973 = r351937 ? r351964 : r351972;
return r351973;
}



Bits error versus x
if (hypot 1.0 x) < 1.0Initial program 30.2
rmApplied flip--30.2
Simplified30.2
rmApplied div-inv30.2
Taylor expanded around 0 30.2
Simplified0.0
if 1.0 < (hypot 1.0 x) Initial program 1.5
rmApplied flip--1.5
Simplified0.5
rmApplied div-inv0.5
rmApplied add-sqr-sqrt1.5
Applied add-sqr-sqrt1.5
Applied times-frac0.5
Applied associate-*r*0.5
Simplified0.5
Final simplification0.3
herbie shell --seed 2020062 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
:precision binary64
(- 1 (sqrt (* 0.5 (+ 1 (/ 1 (hypot 1 x)))))))