\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{\frac{\left(0.5 \cdot 0.5\right) \cdot \left(\frac{0.5 \cdot \left(\left(x \cdot x\right) \cdot \frac{x}{x \cdot x + p \cdot \left(4 \cdot p\right)}\right)}{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}} + 0.5\right)}{0.5 \cdot 0.5 - \left(0.5 - \frac{0.5 \cdot x}{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}}\right) \cdot \frac{0.5 \cdot x}{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}}}}double f(double p, double x) {
double r7715913 = 0.5;
double r7715914 = 1.0;
double r7715915 = x;
double r7715916 = 4.0;
double r7715917 = p;
double r7715918 = r7715916 * r7715917;
double r7715919 = r7715918 * r7715917;
double r7715920 = r7715915 * r7715915;
double r7715921 = r7715919 + r7715920;
double r7715922 = sqrt(r7715921);
double r7715923 = r7715915 / r7715922;
double r7715924 = r7715914 + r7715923;
double r7715925 = r7715913 * r7715924;
double r7715926 = sqrt(r7715925);
return r7715926;
}
double f(double p, double x) {
double r7715927 = 0.5;
double r7715928 = r7715927 * r7715927;
double r7715929 = x;
double r7715930 = r7715929 * r7715929;
double r7715931 = p;
double r7715932 = 4.0;
double r7715933 = r7715932 * r7715931;
double r7715934 = r7715931 * r7715933;
double r7715935 = r7715930 + r7715934;
double r7715936 = r7715929 / r7715935;
double r7715937 = r7715930 * r7715936;
double r7715938 = r7715927 * r7715937;
double r7715939 = sqrt(r7715935);
double r7715940 = r7715938 / r7715939;
double r7715941 = r7715940 + r7715927;
double r7715942 = r7715928 * r7715941;
double r7715943 = r7715927 * r7715929;
double r7715944 = r7715943 / r7715939;
double r7715945 = r7715927 - r7715944;
double r7715946 = r7715945 * r7715944;
double r7715947 = r7715928 - r7715946;
double r7715948 = r7715942 / r7715947;
double r7715949 = sqrt(r7715948);
return r7715949;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.0 |
|---|---|
| Target | 13.0 |
| Herbie | 13.3 |
Initial program 13.0
Simplified13.0
rmApplied flip3-+13.0
Simplified21.5
Simplified21.5
rmApplied *-un-lft-identity21.5
Applied times-frac13.3
Simplified13.3
Final simplification13.3
herbie shell --seed 2019152
(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))))))))