1 - \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}\begin{array}{l}
\mathbf{if}\;x \le -3.617771452625160211354071737588355972548 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{e^{\log \left(1 \cdot 1 - \left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right) \cdot \left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right)\right)}}{\left(1 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right) + 0.5} \cdot 1}{1 + \sqrt{1 \cdot \left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right)}}\\
\mathbf{elif}\;x \le 5.078281910445067021120379990861692931503 \cdot 10^{-4}:\\
\;\;\;\;\mathsf{fma}\left(\sqrt{\frac{1}{{\left(0.5 + \frac{0.5}{\sqrt{1}}\right)}^{3}}} \cdot \frac{{x}^{4}}{{\left(\sqrt{1}\right)}^{5}}, 0.0078125, \mathsf{fma}\left(0.125, \frac{\sqrt{\frac{1}{0.5 + \frac{0.5}{\sqrt{1}}}} \cdot \left(x \cdot x\right)}{1}, 1 - \mathsf{fma}\left(\frac{0.09375}{1} \cdot \frac{{x}^{4}}{1}, \sqrt{\frac{1}{0.5 + \frac{0.5}{\sqrt{1}}}}, \sqrt{1} \cdot \sqrt{0.5 + \frac{0.5}{\sqrt{1}}}\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1 \cdot \frac{\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right) - \left(\left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right) \cdot \left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right)\right) \cdot \left(\left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right) \cdot \left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right)\right)}{\left(1 + \left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right)\right) \cdot \mathsf{fma}\left(1, 1, \left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right) \cdot \left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right)\right)}}{1 + \sqrt{1 \cdot \left(0.5 + \frac{0.5}{\mathsf{hypot}\left(1, x\right)}\right)}}\\
\end{array}double f(double x) {
double r205911 = 1.0;
double r205912 = 0.5;
double r205913 = x;
double r205914 = hypot(r205911, r205913);
double r205915 = r205911 / r205914;
double r205916 = r205911 + r205915;
double r205917 = r205912 * r205916;
double r205918 = sqrt(r205917);
double r205919 = r205911 - r205918;
return r205919;
}
double f(double x) {
double r205920 = x;
double r205921 = -0.000361777145262516;
bool r205922 = r205920 <= r205921;
double r205923 = 1.0;
double r205924 = r205923 * r205923;
double r205925 = 0.5;
double r205926 = hypot(r205923, r205920);
double r205927 = r205925 / r205926;
double r205928 = r205925 + r205927;
double r205929 = r205928 * r205928;
double r205930 = r205924 - r205929;
double r205931 = log(r205930);
double r205932 = exp(r205931);
double r205933 = r205923 + r205927;
double r205934 = r205933 + r205925;
double r205935 = r205932 / r205934;
double r205936 = r205935 * r205923;
double r205937 = r205923 * r205928;
double r205938 = sqrt(r205937);
double r205939 = r205923 + r205938;
double r205940 = r205936 / r205939;
double r205941 = 0.0005078281910445067;
bool r205942 = r205920 <= r205941;
double r205943 = 1.0;
double r205944 = sqrt(r205923);
double r205945 = r205925 / r205944;
double r205946 = r205925 + r205945;
double r205947 = 3.0;
double r205948 = pow(r205946, r205947);
double r205949 = r205943 / r205948;
double r205950 = sqrt(r205949);
double r205951 = 4.0;
double r205952 = pow(r205920, r205951);
double r205953 = 5.0;
double r205954 = pow(r205944, r205953);
double r205955 = r205952 / r205954;
double r205956 = r205950 * r205955;
double r205957 = 0.0078125;
double r205958 = 0.125;
double r205959 = r205943 / r205946;
double r205960 = sqrt(r205959);
double r205961 = r205920 * r205920;
double r205962 = r205960 * r205961;
double r205963 = r205962 / r205923;
double r205964 = 0.09375;
double r205965 = r205964 / r205923;
double r205966 = r205952 / r205923;
double r205967 = r205965 * r205966;
double r205968 = sqrt(r205946);
double r205969 = r205944 * r205968;
double r205970 = fma(r205967, r205960, r205969);
double r205971 = r205923 - r205970;
double r205972 = fma(r205958, r205963, r205971);
double r205973 = fma(r205956, r205957, r205972);
double r205974 = r205924 * r205924;
double r205975 = r205929 * r205929;
double r205976 = r205974 - r205975;
double r205977 = r205923 + r205928;
double r205978 = fma(r205923, r205923, r205929);
double r205979 = r205977 * r205978;
double r205980 = r205976 / r205979;
double r205981 = r205923 * r205980;
double r205982 = r205981 / r205939;
double r205983 = r205942 ? r205973 : r205982;
double r205984 = r205922 ? r205940 : r205983;
return r205984;
}



Bits error versus x
if x < -0.000361777145262516Initial program 1.1
Simplified1.1
rmApplied flip--1.1
Simplified0.1
Simplified0.1
rmApplied flip--0.1
Simplified0.1
Simplified0.1
rmApplied add-exp-log0.1
if -0.000361777145262516 < x < 0.0005078281910445067Initial program 30.5
Simplified30.5
Taylor expanded around 0 30.5
Simplified0.2
if 0.0005078281910445067 < x Initial program 1.1
Simplified1.1
rmApplied flip--1.1
Simplified0.2
Simplified0.2
rmApplied flip--0.2
Simplified0.2
Simplified0.2
rmApplied flip--0.2
Applied associate-/l/0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019179 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
(- 1.0 (sqrt (* 0.5 (+ 1.0 (/ 1.0 (hypot 1.0 x)))))))