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.0000000000000004:\\
\;\;\;\;\frac{\mathsf{fma}\left(0.25, \frac{{x}^{2}}{{\left(\sqrt{1}\right)}^{3}}, 0.5 - \mathsf{fma}\left(0.1875, \frac{{x}^{4}}{{\left(\sqrt{1}\right)}^{5}}, \frac{0.5}{\sqrt{1}}\right)\right)}{\sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{e^{\log \left(1 \cdot 1 - \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right) \cdot 0.5\right)}}{\sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)} + 1}\\
\end{array}double f(double x) {
double r156568 = 1.0;
double r156569 = 0.5;
double r156570 = x;
double r156571 = hypot(r156568, r156570);
double r156572 = r156568 / r156571;
double r156573 = r156568 + r156572;
double r156574 = r156569 * r156573;
double r156575 = sqrt(r156574);
double r156576 = r156568 - r156575;
return r156576;
}
double f(double x) {
double r156577 = 1.0;
double r156578 = x;
double r156579 = hypot(r156577, r156578);
double r156580 = 1.0000000000000004;
bool r156581 = r156579 <= r156580;
double r156582 = 0.25;
double r156583 = 2.0;
double r156584 = pow(r156578, r156583);
double r156585 = sqrt(r156577);
double r156586 = 3.0;
double r156587 = pow(r156585, r156586);
double r156588 = r156584 / r156587;
double r156589 = 0.5;
double r156590 = 0.1875;
double r156591 = 4.0;
double r156592 = pow(r156578, r156591);
double r156593 = 5.0;
double r156594 = pow(r156585, r156593);
double r156595 = r156592 / r156594;
double r156596 = r156589 / r156585;
double r156597 = fma(r156590, r156595, r156596);
double r156598 = r156589 - r156597;
double r156599 = fma(r156582, r156588, r156598);
double r156600 = r156577 / r156579;
double r156601 = r156577 + r156600;
double r156602 = r156589 * r156601;
double r156603 = sqrt(r156602);
double r156604 = r156603 + r156577;
double r156605 = r156599 / r156604;
double r156606 = r156577 * r156577;
double r156607 = r156601 * r156589;
double r156608 = r156606 - r156607;
double r156609 = log(r156608);
double r156610 = exp(r156609);
double r156611 = r156610 / r156604;
double r156612 = r156581 ? r156605 : r156611;
return r156612;
}



Bits error versus x
if (hypot 1.0 x) < 1.0000000000000004Initial program 30.4
rmApplied flip--30.4
Simplified30.4
Simplified30.4
rmApplied add-exp-log30.4
rmApplied add-cbrt-cube30.4
Simplified30.4
Taylor expanded around 0 30.4
Simplified0.0
if 1.0000000000000004 < (hypot 1.0 x) Initial program 1.4
rmApplied flip--1.4
Simplified0.5
Simplified0.5
rmApplied add-exp-log0.5
Final simplification0.2
herbie shell --seed 2019199 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
(- 1.0 (sqrt (* 0.5 (+ 1.0 (/ 1.0 (hypot 1.0 x)))))))