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.0000002351709365:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{4}, x \cdot x, \mathsf{fma}\left(\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \left(x \cdot x\right), \frac{5}{32}, \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \frac{-3}{16}\right)\right)}{\sqrt{\frac{1}{2} + \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{1}{2} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}{\sqrt{\sqrt[3]{\frac{1}{2} + \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}} \cdot \left(\sqrt[3]{\frac{1}{2} + \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}} \cdot \sqrt[3]{\frac{1}{2} + \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}\right)} + 1}\\
\end{array}double f(double x) {
double r3723353 = 1.0;
double r3723354 = 0.5;
double r3723355 = x;
double r3723356 = hypot(r3723353, r3723355);
double r3723357 = r3723353 / r3723356;
double r3723358 = r3723353 + r3723357;
double r3723359 = r3723354 * r3723358;
double r3723360 = sqrt(r3723359);
double r3723361 = r3723353 - r3723360;
return r3723361;
}
double f(double x) {
double r3723362 = 1.0;
double r3723363 = x;
double r3723364 = hypot(r3723362, r3723363);
double r3723365 = 1.0000002351709365;
bool r3723366 = r3723364 <= r3723365;
double r3723367 = 0.25;
double r3723368 = r3723363 * r3723363;
double r3723369 = r3723368 * r3723368;
double r3723370 = r3723369 * r3723368;
double r3723371 = 0.15625;
double r3723372 = -0.1875;
double r3723373 = r3723369 * r3723372;
double r3723374 = fma(r3723370, r3723371, r3723373);
double r3723375 = fma(r3723367, r3723368, r3723374);
double r3723376 = 0.5;
double r3723377 = r3723376 / r3723364;
double r3723378 = r3723376 + r3723377;
double r3723379 = sqrt(r3723378);
double r3723380 = r3723379 + r3723362;
double r3723381 = r3723375 / r3723380;
double r3723382 = r3723376 - r3723377;
double r3723383 = cbrt(r3723378);
double r3723384 = r3723383 * r3723383;
double r3723385 = r3723383 * r3723384;
double r3723386 = sqrt(r3723385);
double r3723387 = r3723386 + r3723362;
double r3723388 = r3723382 / r3723387;
double r3723389 = r3723366 ? r3723381 : r3723388;
return r3723389;
}



Bits error versus x
if (hypot 1 x) < 1.0000002351709365Initial program 30.9
Simplified30.9
rmApplied flip--30.9
Simplified30.8
Taylor expanded around 0 0.0
Simplified0.0
if 1.0000002351709365 < (hypot 1 x) Initial program 1.1
Simplified1.1
rmApplied flip--1.1
Simplified0.1
rmApplied add-cube-cbrt0.1
Final simplification0.1
herbie shell --seed 2019149 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
(- 1 (sqrt (* 1/2 (+ 1 (/ 1 (hypot 1 x)))))))