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.0000015983144306:\\
\;\;\;\;\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 r306062 = 1.0;
double r306063 = 0.5;
double r306064 = x;
double r306065 = hypot(r306062, r306064);
double r306066 = r306062 / r306065;
double r306067 = r306062 + r306066;
double r306068 = r306063 * r306067;
double r306069 = sqrt(r306068);
double r306070 = r306062 - r306069;
return r306070;
}
double f(double x) {
double r306071 = 1.0;
double r306072 = x;
double r306073 = hypot(r306071, r306072);
double r306074 = 1.0000015983144306;
bool r306075 = r306073 <= r306074;
double r306076 = 0.25;
double r306077 = 2.0;
double r306078 = pow(r306072, r306077);
double r306079 = sqrt(r306071);
double r306080 = 3.0;
double r306081 = pow(r306079, r306080);
double r306082 = r306078 / r306081;
double r306083 = 0.5;
double r306084 = 1.0;
double r306085 = r306084 / r306079;
double r306086 = 0.1875;
double r306087 = 4.0;
double r306088 = pow(r306072, r306087);
double r306089 = 5.0;
double r306090 = pow(r306079, r306089);
double r306091 = r306088 / r306090;
double r306092 = r306086 * r306091;
double r306093 = fma(r306083, r306085, r306092);
double r306094 = r306083 - r306093;
double r306095 = fma(r306076, r306082, r306094);
double r306096 = r306071 / r306073;
double r306097 = r306071 + r306096;
double r306098 = r306083 * r306097;
double r306099 = sqrt(r306098);
double r306100 = r306071 + r306099;
double r306101 = r306095 / r306100;
double r306102 = -r306083;
double r306103 = r306071 * r306071;
double r306104 = fma(r306102, r306097, r306103);
double r306105 = exp(r306104);
double r306106 = log(r306105);
double r306107 = r306106 / r306100;
double r306108 = r306075 ? r306101 : r306107;
return r306108;
}



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