\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 r329687 = 0.5;
double r329688 = 1.0;
double r329689 = x;
double r329690 = 4.0;
double r329691 = p;
double r329692 = r329690 * r329691;
double r329693 = r329692 * r329691;
double r329694 = r329689 * r329689;
double r329695 = r329693 + r329694;
double r329696 = sqrt(r329695);
double r329697 = r329689 / r329696;
double r329698 = r329688 + r329697;
double r329699 = r329687 * r329698;
double r329700 = sqrt(r329699);
return r329700;
}
double f(double p, double x) {
double r329701 = 0.5;
double r329702 = 1.0;
double r329703 = x;
double r329704 = 4.0;
double r329705 = p;
double r329706 = r329704 * r329705;
double r329707 = r329706 * r329705;
double r329708 = r329703 * r329703;
double r329709 = r329707 + r329708;
double r329710 = sqrt(r329709);
double r329711 = r329703 / r329710;
double r329712 = r329702 + r329711;
double r329713 = r329701 * r329712;
double r329714 = sqrt(r329713);
return r329714;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.6 |
|---|---|
| Target | 13.6 |
| Herbie | 13.6 |
Initial program 13.6
Final simplification13.6
herbie shell --seed 2020062 +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))))))))