Average Error: 13.0 → 14.7
Time: 19.4s
Precision: 64
\[10^{-150} \lt \left|x\right| \lt 10^{+150}\]
\[\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.0089186447096822 \cdot 10^{+19}:\\ \;\;\;\;\sqrt{1.0 \cdot \left(\frac{\frac{-1}{x}}{\frac{-1}{p}} \cdot \frac{\frac{-1}{x}}{\frac{-1}{p}}\right)}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(x \cdot \frac{1}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}, 0.5, 0.5\right)}\\ \end{array}\]
\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}
\begin{array}{l}
\mathbf{if}\;x \le -1.0089186447096822 \cdot 10^{+19}:\\
\;\;\;\;\sqrt{1.0 \cdot \left(\frac{\frac{-1}{x}}{\frac{-1}{p}} \cdot \frac{\frac{-1}{x}}{\frac{-1}{p}}\right)}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(x \cdot \frac{1}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}, 0.5, 0.5\right)}\\

\end{array}
double f(double p, double x) {
        double r7731911 = 0.5;
        double r7731912 = 1.0;
        double r7731913 = x;
        double r7731914 = 4.0;
        double r7731915 = p;
        double r7731916 = r7731914 * r7731915;
        double r7731917 = r7731916 * r7731915;
        double r7731918 = r7731913 * r7731913;
        double r7731919 = r7731917 + r7731918;
        double r7731920 = sqrt(r7731919);
        double r7731921 = r7731913 / r7731920;
        double r7731922 = r7731912 + r7731921;
        double r7731923 = r7731911 * r7731922;
        double r7731924 = sqrt(r7731923);
        return r7731924;
}

double f(double p, double x) {
        double r7731925 = x;
        double r7731926 = -1.0089186447096822e+19;
        bool r7731927 = r7731925 <= r7731926;
        double r7731928 = 1.0;
        double r7731929 = -1.0;
        double r7731930 = r7731929 / r7731925;
        double r7731931 = p;
        double r7731932 = r7731929 / r7731931;
        double r7731933 = r7731930 / r7731932;
        double r7731934 = r7731933 * r7731933;
        double r7731935 = r7731928 * r7731934;
        double r7731936 = sqrt(r7731935);
        double r7731937 = 1.0;
        double r7731938 = 4.0;
        double r7731939 = r7731938 * r7731931;
        double r7731940 = r7731925 * r7731925;
        double r7731941 = fma(r7731931, r7731939, r7731940);
        double r7731942 = sqrt(r7731941);
        double r7731943 = r7731937 / r7731942;
        double r7731944 = r7731925 * r7731943;
        double r7731945 = 0.5;
        double r7731946 = fma(r7731944, r7731945, r7731945);
        double r7731947 = sqrt(r7731946);
        double r7731948 = r7731927 ? r7731936 : r7731947;
        return r7731948;
}

Error

Bits error versus p

Bits error versus x

Target

Original13.0
Target13.0
Herbie14.7
\[\sqrt{\frac{1}{2} + \frac{\mathsf{copysign}\left(\frac{1}{2}, x\right)}{\mathsf{hypot}\left(1, \frac{2 \cdot p}{x}\right)}}\]

Derivation

  1. Split input into 2 regimes
  2. if x < -1.0089186447096822e+19

    1. Initial program 28.8

      \[\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\]
    2. Simplified28.8

      \[\leadsto \color{blue}{\sqrt{\mathsf{fma}\left(\frac{x}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}, 0.5, 0.5\right)}}\]
    3. Using strategy rm
    4. Applied add-exp-log28.8

      \[\leadsto \sqrt{\color{blue}{e^{\log \left(\mathsf{fma}\left(\frac{x}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}, 0.5, 0.5\right)\right)}}}\]
    5. Using strategy rm
    6. Applied pow128.8

      \[\leadsto \sqrt{e^{\log \color{blue}{\left({\left(\mathsf{fma}\left(\frac{x}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}, 0.5, 0.5\right)\right)}^{1}\right)}}}\]
    7. Applied log-pow28.8

      \[\leadsto \sqrt{e^{\color{blue}{1 \cdot \log \left(\mathsf{fma}\left(\frac{x}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}, 0.5, 0.5\right)\right)}}}\]
    8. Applied exp-prod28.8

      \[\leadsto \sqrt{\color{blue}{{\left(e^{1}\right)}^{\left(\log \left(\mathsf{fma}\left(\frac{x}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}, 0.5, 0.5\right)\right)\right)}}}\]
    9. Simplified28.8

      \[\leadsto \sqrt{{\color{blue}{e}}^{\left(\log \left(\mathsf{fma}\left(\frac{x}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}, 0.5, 0.5\right)\right)\right)}}\]
    10. Taylor expanded around -inf 50.1

      \[\leadsto \sqrt{\color{blue}{e^{\left(\log 1.0 + 2 \cdot \log \left(\frac{-1}{x}\right)\right) - 2 \cdot \log \left(\frac{-1}{p}\right)}}}\]
    11. Simplified36.9

      \[\leadsto \sqrt{\color{blue}{1.0 \cdot \left(\frac{\frac{-1}{x}}{\frac{-1}{p}} \cdot \frac{\frac{-1}{x}}{\frac{-1}{p}}\right)}}\]

    if -1.0089186447096822e+19 < x

    1. Initial program 8.6

      \[\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\]
    2. Simplified8.6

      \[\leadsto \color{blue}{\sqrt{\mathsf{fma}\left(\frac{x}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}, 0.5, 0.5\right)}}\]
    3. Using strategy rm
    4. Applied div-inv8.6

      \[\leadsto \sqrt{\mathsf{fma}\left(\color{blue}{x \cdot \frac{1}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}}, 0.5, 0.5\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification14.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.0089186447096822 \cdot 10^{+19}:\\ \;\;\;\;\sqrt{1.0 \cdot \left(\frac{\frac{-1}{x}}{\frac{-1}{p}} \cdot \frac{\frac{-1}{x}}{\frac{-1}{p}}\right)}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(x \cdot \frac{1}{\sqrt{\mathsf{fma}\left(p, 4 \cdot p, x \cdot x\right)}}, 0.5, 0.5\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019151 +o rules:numerics
(FPCore (p x)
  :name "Given's Rotation SVD example"
  :pre (< 1e-150 (fabs x) 1e+150)

  :herbie-target
  (sqrt (+ 1/2 (/ (copysign 1/2 x) (hypot 1 (/ (* 2 p) x)))))

  (sqrt (* 0.5 (+ 1 (/ x (sqrt (+ (* (* 4 p) p) (* x x))))))))