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.000000009489094:\\
\;\;\;\;\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{e^{\log \left(\mathsf{fma}\left(-0.5, 1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}, 1 \cdot 1\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 r228973 = 1.0;
double r228974 = 0.5;
double r228975 = x;
double r228976 = hypot(r228973, r228975);
double r228977 = r228973 / r228976;
double r228978 = r228973 + r228977;
double r228979 = r228974 * r228978;
double r228980 = sqrt(r228979);
double r228981 = r228973 - r228980;
return r228981;
}
double f(double x) {
double r228982 = 1.0;
double r228983 = x;
double r228984 = hypot(r228982, r228983);
double r228985 = 1.000000009489094;
bool r228986 = r228984 <= r228985;
double r228987 = 0.25;
double r228988 = 2.0;
double r228989 = pow(r228983, r228988);
double r228990 = sqrt(r228982);
double r228991 = 3.0;
double r228992 = pow(r228990, r228991);
double r228993 = r228989 / r228992;
double r228994 = 0.5;
double r228995 = 1.0;
double r228996 = r228995 / r228990;
double r228997 = 0.1875;
double r228998 = 4.0;
double r228999 = pow(r228983, r228998);
double r229000 = 5.0;
double r229001 = pow(r228990, r229000);
double r229002 = r228999 / r229001;
double r229003 = r228997 * r229002;
double r229004 = fma(r228994, r228996, r229003);
double r229005 = r228994 - r229004;
double r229006 = fma(r228987, r228993, r229005);
double r229007 = r228982 / r228984;
double r229008 = r228982 + r229007;
double r229009 = r228994 * r229008;
double r229010 = sqrt(r229009);
double r229011 = r228982 + r229010;
double r229012 = r229006 / r229011;
double r229013 = -r228994;
double r229014 = r228982 * r228982;
double r229015 = fma(r229013, r229008, r229014);
double r229016 = log(r229015);
double r229017 = exp(r229016);
double r229018 = r229017 / r229011;
double r229019 = r228986 ? r229012 : r229018;
return r229019;
}



Bits error versus x
if (hypot 1.0 x) < 1.000000009489094Initial program 29.7
rmApplied flip--29.7
Simplified29.7
Taylor expanded around 0 29.7
Simplified0.2
if 1.000000009489094 < (hypot 1.0 x) Initial program 1.1
rmApplied flip--1.2
Simplified0.2
rmApplied add-exp-log0.2
Final simplification0.2
herbie shell --seed 2020056 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
:precision binary64
(- 1 (sqrt (* 0.5 (+ 1 (/ 1 (hypot 1 x)))))))