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.00000000001950906:\\
\;\;\;\;\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{\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)}}\\
\end{array}double f(double x) {
double r218485 = 1.0;
double r218486 = 0.5;
double r218487 = x;
double r218488 = hypot(r218485, r218487);
double r218489 = r218485 / r218488;
double r218490 = r218485 + r218489;
double r218491 = r218486 * r218490;
double r218492 = sqrt(r218491);
double r218493 = r218485 - r218492;
return r218493;
}
double f(double x) {
double r218494 = 1.0;
double r218495 = x;
double r218496 = hypot(r218494, r218495);
double r218497 = 1.000000000019509;
bool r218498 = r218496 <= r218497;
double r218499 = 0.25;
double r218500 = 2.0;
double r218501 = pow(r218495, r218500);
double r218502 = sqrt(r218494);
double r218503 = 3.0;
double r218504 = pow(r218502, r218503);
double r218505 = r218501 / r218504;
double r218506 = 0.5;
double r218507 = 1.0;
double r218508 = r218507 / r218502;
double r218509 = 0.1875;
double r218510 = 4.0;
double r218511 = pow(r218495, r218510);
double r218512 = 5.0;
double r218513 = pow(r218502, r218512);
double r218514 = r218511 / r218513;
double r218515 = r218509 * r218514;
double r218516 = fma(r218506, r218508, r218515);
double r218517 = r218506 - r218516;
double r218518 = fma(r218499, r218505, r218517);
double r218519 = r218494 / r218496;
double r218520 = r218494 + r218519;
double r218521 = r218506 * r218520;
double r218522 = sqrt(r218521);
double r218523 = r218494 + r218522;
double r218524 = r218518 / r218523;
double r218525 = -r218506;
double r218526 = r218494 * r218494;
double r218527 = fma(r218525, r218520, r218526);
double r218528 = exp(r218527);
double r218529 = log(r218528);
double r218530 = r218529 / r218523;
double r218531 = r218498 ? r218524 : r218530;
return r218531;
}



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