Average Error: 15.1 → 0.0
Time: 17.0s
Precision: 64
\[1 - \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.01162356852928599:\\ \;\;\;\;\frac{\frac{1}{2} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}{1 + \sqrt{\frac{1}{2} + \log \left(e^{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}\right)}}\\ \mathbf{elif}\;x \le 0.011344591265067936:\\ \;\;\;\;\mathsf{fma}\left(\frac{69}{1024}, \left(\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \left(x \cdot x\right)\right), \left(\mathsf{fma}\left(\frac{1}{8}, \left(x \cdot x\right), \left(\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \frac{-11}{128}\right)\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{1}{2} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}{1 + \sqrt{\frac{1}{2} + \log \left(e^{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}\right)}}\\ \end{array}\]
1 - \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}
\begin{array}{l}
\mathbf{if}\;x \le -0.01162356852928599:\\
\;\;\;\;\frac{\frac{1}{2} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}{1 + \sqrt{\frac{1}{2} + \log \left(e^{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}\right)}}\\

\mathbf{elif}\;x \le 0.011344591265067936:\\
\;\;\;\;\mathsf{fma}\left(\frac{69}{1024}, \left(\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \left(x \cdot x\right)\right), \left(\mathsf{fma}\left(\frac{1}{8}, \left(x \cdot x\right), \left(\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \frac{-11}{128}\right)\right)\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{1}{2} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}{1 + \sqrt{\frac{1}{2} + \log \left(e^{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}\right)}}\\

\end{array}
double f(double x) {
        double r3517152 = 1.0;
        double r3517153 = 0.5;
        double r3517154 = x;
        double r3517155 = hypot(r3517152, r3517154);
        double r3517156 = r3517152 / r3517155;
        double r3517157 = r3517152 + r3517156;
        double r3517158 = r3517153 * r3517157;
        double r3517159 = sqrt(r3517158);
        double r3517160 = r3517152 - r3517159;
        return r3517160;
}

double f(double x) {
        double r3517161 = x;
        double r3517162 = -0.01162356852928599;
        bool r3517163 = r3517161 <= r3517162;
        double r3517164 = 0.5;
        double r3517165 = 1.0;
        double r3517166 = hypot(r3517165, r3517161);
        double r3517167 = r3517164 / r3517166;
        double r3517168 = r3517164 - r3517167;
        double r3517169 = exp(r3517167);
        double r3517170 = log(r3517169);
        double r3517171 = r3517164 + r3517170;
        double r3517172 = sqrt(r3517171);
        double r3517173 = r3517165 + r3517172;
        double r3517174 = r3517168 / r3517173;
        double r3517175 = 0.011344591265067936;
        bool r3517176 = r3517161 <= r3517175;
        double r3517177 = 0.0673828125;
        double r3517178 = r3517161 * r3517161;
        double r3517179 = r3517178 * r3517178;
        double r3517180 = r3517179 * r3517178;
        double r3517181 = 0.125;
        double r3517182 = -0.0859375;
        double r3517183 = r3517179 * r3517182;
        double r3517184 = fma(r3517181, r3517178, r3517183);
        double r3517185 = fma(r3517177, r3517180, r3517184);
        double r3517186 = r3517176 ? r3517185 : r3517174;
        double r3517187 = r3517163 ? r3517174 : r3517186;
        return r3517187;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -0.01162356852928599 or 0.011344591265067936 < x

    1. Initial program 1.0

      \[1 - \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}\]
    2. Simplified1.0

      \[\leadsto \color{blue}{1 - \sqrt{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} + \frac{1}{2}}}\]
    3. Using strategy rm
    4. Applied flip--1.0

      \[\leadsto \color{blue}{\frac{1 \cdot 1 - \sqrt{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} + \frac{1}{2}} \cdot \sqrt{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} + \frac{1}{2}}}{1 + \sqrt{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} + \frac{1}{2}}}}\]
    5. Simplified0.0

      \[\leadsto \frac{\color{blue}{\frac{1}{2} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}}{1 + \sqrt{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} + \frac{1}{2}}}\]
    6. Using strategy rm
    7. Applied add-log-exp0.1

      \[\leadsto \frac{\frac{1}{2} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}{1 + \sqrt{\color{blue}{\log \left(e^{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}\right)} + \frac{1}{2}}}\]

    if -0.01162356852928599 < x < 0.011344591265067936

    1. Initial program 29.8

      \[1 - \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}\]
    2. Simplified29.8

      \[\leadsto \color{blue}{1 - \sqrt{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)} + \frac{1}{2}}}\]
    3. Taylor expanded around 0 0.0

      \[\leadsto \color{blue}{\left(\frac{1}{8} \cdot {x}^{2} + \frac{69}{1024} \cdot {x}^{6}\right) - \frac{11}{128} \cdot {x}^{4}}\]
    4. Simplified0.0

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{69}{1024}, \left(\left(x \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)\right), \left(\mathsf{fma}\left(\frac{1}{8}, \left(x \cdot x\right), \left(\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \frac{-11}{128}\right)\right)\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.01162356852928599:\\ \;\;\;\;\frac{\frac{1}{2} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}{1 + \sqrt{\frac{1}{2} + \log \left(e^{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}\right)}}\\ \mathbf{elif}\;x \le 0.011344591265067936:\\ \;\;\;\;\mathsf{fma}\left(\frac{69}{1024}, \left(\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \left(x \cdot x\right)\right), \left(\mathsf{fma}\left(\frac{1}{8}, \left(x \cdot x\right), \left(\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \frac{-11}{128}\right)\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{1}{2} - \frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}{1 + \sqrt{\frac{1}{2} + \log \left(e^{\frac{\frac{1}{2}}{\mathsf{hypot}\left(1, x\right)}}\right)}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019133 +o rules:numerics
(FPCore (x)
  :name "Given's Rotation SVD example, simplified"
  (- 1 (sqrt (* 1/2 (+ 1 (/ 1 (hypot 1 x)))))))