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 r164258 = 1.0;
double r164259 = 0.5;
double r164260 = x;
double r164261 = hypot(r164258, r164260);
double r164262 = r164258 / r164261;
double r164263 = r164258 + r164262;
double r164264 = r164259 * r164263;
double r164265 = sqrt(r164264);
double r164266 = r164258 - r164265;
return r164266;
}
double f(double x) {
double r164267 = 1.0;
double r164268 = x;
double r164269 = hypot(r164267, r164268);
double r164270 = 1.000000009489094;
bool r164271 = r164269 <= r164270;
double r164272 = 0.25;
double r164273 = 2.0;
double r164274 = pow(r164268, r164273);
double r164275 = sqrt(r164267);
double r164276 = 3.0;
double r164277 = pow(r164275, r164276);
double r164278 = r164274 / r164277;
double r164279 = 0.5;
double r164280 = 1.0;
double r164281 = r164280 / r164275;
double r164282 = 0.1875;
double r164283 = 4.0;
double r164284 = pow(r164268, r164283);
double r164285 = 5.0;
double r164286 = pow(r164275, r164285);
double r164287 = r164284 / r164286;
double r164288 = r164282 * r164287;
double r164289 = fma(r164279, r164281, r164288);
double r164290 = r164279 - r164289;
double r164291 = fma(r164272, r164278, r164290);
double r164292 = r164267 / r164269;
double r164293 = r164267 + r164292;
double r164294 = r164279 * r164293;
double r164295 = sqrt(r164294);
double r164296 = r164267 + r164295;
double r164297 = r164291 / r164296;
double r164298 = -r164279;
double r164299 = r164267 * r164267;
double r164300 = fma(r164298, r164293, r164299);
double r164301 = log(r164300);
double r164302 = exp(r164301);
double r164303 = r164302 / r164296;
double r164304 = r164271 ? r164297 : r164303;
return r164304;
}



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)))))))