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.000000012332063592523923034605104476213:\\
\;\;\;\;\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{\log \left(e^{\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 r214840 = 1.0;
double r214841 = 0.5;
double r214842 = x;
double r214843 = hypot(r214840, r214842);
double r214844 = r214840 / r214843;
double r214845 = r214840 + r214844;
double r214846 = r214841 * r214845;
double r214847 = sqrt(r214846);
double r214848 = r214840 - r214847;
return r214848;
}
double f(double x) {
double r214849 = 1.0;
double r214850 = x;
double r214851 = hypot(r214849, r214850);
double r214852 = 1.0000000123320636;
bool r214853 = r214851 <= r214852;
double r214854 = 0.25;
double r214855 = 2.0;
double r214856 = pow(r214850, r214855);
double r214857 = sqrt(r214849);
double r214858 = 3.0;
double r214859 = pow(r214857, r214858);
double r214860 = r214856 / r214859;
double r214861 = 0.5;
double r214862 = 1.0;
double r214863 = r214862 / r214857;
double r214864 = 0.1875;
double r214865 = 4.0;
double r214866 = pow(r214850, r214865);
double r214867 = 5.0;
double r214868 = pow(r214857, r214867);
double r214869 = r214866 / r214868;
double r214870 = r214864 * r214869;
double r214871 = fma(r214861, r214863, r214870);
double r214872 = r214861 - r214871;
double r214873 = fma(r214854, r214860, r214872);
double r214874 = r214849 / r214851;
double r214875 = r214849 + r214874;
double r214876 = r214861 * r214875;
double r214877 = sqrt(r214876);
double r214878 = r214849 + r214877;
double r214879 = r214873 / r214878;
double r214880 = -r214861;
double r214881 = r214849 * r214849;
double r214882 = fma(r214880, r214875, r214881);
double r214883 = exp(r214882);
double r214884 = log(r214883);
double r214885 = r214884 / r214878;
double r214886 = r214853 ? r214879 : r214885;
return r214886;
}



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