1 - \sqrt{\frac{1}{2} \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.000007475300068:\\
\;\;\;\;\mathsf{fma}\left(\left(\left(x \cdot x\right) \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot x\right), \frac{69}{1024}, \frac{1}{8} \cdot \left(x \cdot x\right)\right) - \frac{11}{128} \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1 - \left(\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} + \frac{1}{2}\right) \cdot \sqrt{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} + \frac{1}{2}}}{\left(\sqrt{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} + \frac{1}{2}} + \left(\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} + \frac{1}{2}\right)\right) + 1}\\
\end{array}double f(double x) {
double r2082557 = 1.0;
double r2082558 = 0.5;
double r2082559 = x;
double r2082560 = hypot(r2082557, r2082559);
double r2082561 = r2082557 / r2082560;
double r2082562 = r2082557 + r2082561;
double r2082563 = r2082558 * r2082562;
double r2082564 = sqrt(r2082563);
double r2082565 = r2082557 - r2082564;
return r2082565;
}
double f(double x) {
double r2082566 = 1.0;
double r2082567 = x;
double r2082568 = hypot(r2082566, r2082567);
double r2082569 = 1.000007475300068;
bool r2082570 = r2082568 <= r2082569;
double r2082571 = r2082567 * r2082567;
double r2082572 = r2082571 * r2082567;
double r2082573 = r2082572 * r2082572;
double r2082574 = 0.0673828125;
double r2082575 = 0.125;
double r2082576 = r2082575 * r2082571;
double r2082577 = fma(r2082573, r2082574, r2082576);
double r2082578 = 0.0859375;
double r2082579 = r2082571 * r2082571;
double r2082580 = r2082578 * r2082579;
double r2082581 = r2082577 - r2082580;
double r2082582 = 0.5;
double r2082583 = r2082582 / r2082568;
double r2082584 = r2082583 + r2082582;
double r2082585 = sqrt(r2082584);
double r2082586 = r2082584 * r2082585;
double r2082587 = r2082566 - r2082586;
double r2082588 = r2082585 + r2082584;
double r2082589 = r2082588 + r2082566;
double r2082590 = r2082587 / r2082589;
double r2082591 = r2082570 ? r2082581 : r2082590;
return r2082591;
}



Bits error versus x
if (hypot 1 x) < 1.000007475300068Initial program 30.0
Simplified30.0
rmApplied flip3--30.0
Simplified30.0
Simplified30.0
Taylor expanded around 0 0.0
Simplified0.0
if 1.000007475300068 < (hypot 1 x) Initial program 1.0
Simplified1.0
rmApplied flip3--1.6
Simplified1.0
Simplified0.1
Final simplification0.0
herbie shell --seed 2019156 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
(- 1 (sqrt (* 1/2 (+ 1 (/ 1 (hypot 1 x)))))))