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:\\
\;\;\;\;\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(1, 1, \left(-0.5\right) \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)\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 r336419 = 1.0;
double r336420 = 0.5;
double r336421 = x;
double r336422 = hypot(r336419, r336421);
double r336423 = r336419 / r336422;
double r336424 = r336419 + r336423;
double r336425 = r336420 * r336424;
double r336426 = sqrt(r336425);
double r336427 = r336419 - r336426;
return r336427;
}
double f(double x) {
double r336428 = 1.0;
double r336429 = x;
double r336430 = hypot(r336428, r336429);
bool r336431 = r336430 <= r336428;
double r336432 = 0.25;
double r336433 = 2.0;
double r336434 = pow(r336429, r336433);
double r336435 = sqrt(r336428);
double r336436 = 3.0;
double r336437 = pow(r336435, r336436);
double r336438 = r336434 / r336437;
double r336439 = 0.5;
double r336440 = 1.0;
double r336441 = r336440 / r336435;
double r336442 = 0.1875;
double r336443 = 4.0;
double r336444 = pow(r336429, r336443);
double r336445 = 5.0;
double r336446 = pow(r336435, r336445);
double r336447 = r336444 / r336446;
double r336448 = r336442 * r336447;
double r336449 = fma(r336439, r336441, r336448);
double r336450 = r336439 - r336449;
double r336451 = fma(r336432, r336438, r336450);
double r336452 = r336428 / r336430;
double r336453 = r336428 + r336452;
double r336454 = r336439 * r336453;
double r336455 = sqrt(r336454);
double r336456 = r336428 + r336455;
double r336457 = r336451 / r336456;
double r336458 = -r336439;
double r336459 = r336458 * r336453;
double r336460 = fma(r336428, r336428, r336459);
double r336461 = log(r336460);
double r336462 = exp(r336461);
double r336463 = r336462 / r336456;
double r336464 = r336431 ? r336457 : r336463;
return r336464;
}



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