\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 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}double f(double p, double x) {
double r319773 = 0.5;
double r319774 = 1.0;
double r319775 = x;
double r319776 = 4.0;
double r319777 = p;
double r319778 = r319776 * r319777;
double r319779 = r319778 * r319777;
double r319780 = r319775 * r319775;
double r319781 = r319779 + r319780;
double r319782 = sqrt(r319781);
double r319783 = r319775 / r319782;
double r319784 = r319774 + r319783;
double r319785 = r319773 * r319784;
double r319786 = sqrt(r319785);
return r319786;
}
double f(double p, double x) {
double r319787 = 0.5;
double r319788 = 1.0;
double r319789 = x;
double r319790 = 4.0;
double r319791 = p;
double r319792 = r319790 * r319791;
double r319793 = r319792 * r319791;
double r319794 = r319789 * r319789;
double r319795 = r319793 + r319794;
double r319796 = sqrt(r319795);
double r319797 = r319789 / r319796;
double r319798 = r319788 + r319797;
double r319799 = r319787 * r319798;
double r319800 = sqrt(r319799);
return r319800;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.8 |
|---|---|
| Target | 13.8 |
| Herbie | 13.8 |
Initial program 13.8
Final simplification13.8
herbie shell --seed 2019346 +o rules:numerics
(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))))))))