1 - \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}\begin{array}{l}
\mathbf{if}\;x \le -4.029999773774761207857653122488272856572 \cdot 10^{-4}:\\
\;\;\;\;\frac{\log \left(e^{\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)}}\\
\mathbf{elif}\;x \le 0.962287518002190367383263946976512670517:\\
\;\;\;\;\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{\frac{-0.5}{x} + \mathsf{fma}\left(0.25, \frac{1}{{x}^{3}}, 0.5\right)}{1 + \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}}\\
\end{array}double f(double x) {
double r244525 = 1.0;
double r244526 = 0.5;
double r244527 = x;
double r244528 = hypot(r244525, r244527);
double r244529 = r244525 / r244528;
double r244530 = r244525 + r244529;
double r244531 = r244526 * r244530;
double r244532 = sqrt(r244531);
double r244533 = r244525 - r244532;
return r244533;
}
double f(double x) {
double r244534 = x;
double r244535 = -0.0004029999773774761;
bool r244536 = r244534 <= r244535;
double r244537 = 0.5;
double r244538 = -r244537;
double r244539 = 1.0;
double r244540 = hypot(r244539, r244534);
double r244541 = r244539 / r244540;
double r244542 = r244539 + r244541;
double r244543 = r244539 * r244539;
double r244544 = fma(r244538, r244542, r244543);
double r244545 = exp(r244544);
double r244546 = log(r244545);
double r244547 = r244537 * r244542;
double r244548 = sqrt(r244547);
double r244549 = r244539 + r244548;
double r244550 = r244546 / r244549;
double r244551 = 0.9622875180021904;
bool r244552 = r244534 <= r244551;
double r244553 = 0.25;
double r244554 = 2.0;
double r244555 = pow(r244534, r244554);
double r244556 = sqrt(r244539);
double r244557 = 3.0;
double r244558 = pow(r244556, r244557);
double r244559 = r244555 / r244558;
double r244560 = 1.0;
double r244561 = r244560 / r244556;
double r244562 = 0.1875;
double r244563 = 4.0;
double r244564 = pow(r244534, r244563);
double r244565 = 5.0;
double r244566 = pow(r244556, r244565);
double r244567 = r244564 / r244566;
double r244568 = r244562 * r244567;
double r244569 = fma(r244537, r244561, r244568);
double r244570 = r244537 - r244569;
double r244571 = fma(r244553, r244559, r244570);
double r244572 = r244571 / r244549;
double r244573 = r244538 / r244534;
double r244574 = pow(r244534, r244557);
double r244575 = r244560 / r244574;
double r244576 = fma(r244553, r244575, r244537);
double r244577 = r244573 + r244576;
double r244578 = r244577 / r244549;
double r244579 = r244552 ? r244572 : r244578;
double r244580 = r244536 ? r244550 : r244579;
return r244580;
}



Bits error versus x
if x < -0.0004029999773774761Initial program 1.1
rmApplied flip--1.1
Simplified0.1
rmApplied add-log-exp0.2
if -0.0004029999773774761 < x < 0.9622875180021904Initial program 30.1
rmApplied flip--30.1
Simplified30.1
Taylor expanded around 0 30.2
Simplified0.3
if 0.9622875180021904 < x Initial program 1.0
rmApplied flip--1.0
Simplified0.0
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019346 +o rules:numerics
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
:precision binary64
(- 1 (sqrt (* 0.5 (+ 1 (/ 1 (hypot 1 x)))))))