Average Error: 13.0 → 13.2
Time: 15.8s
Precision: 64
\[1.000000000000000006295358232172963997211 \cdot 10^{-150} \lt \left|x\right| \lt 9.999999999999999808355961724373745905731 \cdot 10^{149}\]
\[\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\]
\[\sqrt{0.5 \cdot \left(1 + x \cdot \frac{1}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\]
\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}
\sqrt{0.5 \cdot \left(1 + x \cdot \frac{1}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}
double f(double p, double x) {
        double r268910 = 0.5;
        double r268911 = 1.0;
        double r268912 = x;
        double r268913 = 4.0;
        double r268914 = p;
        double r268915 = r268913 * r268914;
        double r268916 = r268915 * r268914;
        double r268917 = r268912 * r268912;
        double r268918 = r268916 + r268917;
        double r268919 = sqrt(r268918);
        double r268920 = r268912 / r268919;
        double r268921 = r268911 + r268920;
        double r268922 = r268910 * r268921;
        double r268923 = sqrt(r268922);
        return r268923;
}

double f(double p, double x) {
        double r268924 = 0.5;
        double r268925 = 1.0;
        double r268926 = x;
        double r268927 = 1.0;
        double r268928 = 4.0;
        double r268929 = p;
        double r268930 = r268928 * r268929;
        double r268931 = r268930 * r268929;
        double r268932 = r268926 * r268926;
        double r268933 = r268931 + r268932;
        double r268934 = sqrt(r268933);
        double r268935 = r268927 / r268934;
        double r268936 = r268926 * r268935;
        double r268937 = r268925 + r268936;
        double r268938 = r268924 * r268937;
        double r268939 = sqrt(r268938);
        return r268939;
}

Error

Bits error versus p

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

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

Derivation

  1. Initial program 13.0

    \[\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\]
  2. Using strategy rm
  3. Applied div-inv13.2

    \[\leadsto \sqrt{0.5 \cdot \left(1 + \color{blue}{x \cdot \frac{1}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}}\right)}\]
  4. Final simplification13.2

    \[\leadsto \sqrt{0.5 \cdot \left(1 + x \cdot \frac{1}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\]

Reproduce

herbie shell --seed 2019347 
(FPCore (p x)
  :name "Given's Rotation SVD example"
  :precision binary64
  :pre (< 1e-150 (fabs x) 1e+150)

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

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