\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{\left(1 + \frac{x}{\sqrt{\sqrt{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}}} \cdot \left(\sqrt{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}} \cdot \sqrt{\sqrt{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}}}\right)}\right) \cdot 0.5}double f(double p, double x) {
double r4107656 = 0.5;
double r4107657 = 1.0;
double r4107658 = x;
double r4107659 = 4.0;
double r4107660 = p;
double r4107661 = r4107659 * r4107660;
double r4107662 = r4107661 * r4107660;
double r4107663 = r4107658 * r4107658;
double r4107664 = r4107662 + r4107663;
double r4107665 = sqrt(r4107664);
double r4107666 = r4107658 / r4107665;
double r4107667 = r4107657 + r4107666;
double r4107668 = r4107656 * r4107667;
double r4107669 = sqrt(r4107668);
return r4107669;
}
double f(double p, double x) {
double r4107670 = 1.0;
double r4107671 = x;
double r4107672 = r4107671 * r4107671;
double r4107673 = p;
double r4107674 = 4.0;
double r4107675 = r4107674 * r4107673;
double r4107676 = r4107673 * r4107675;
double r4107677 = r4107672 + r4107676;
double r4107678 = sqrt(r4107677);
double r4107679 = sqrt(r4107678);
double r4107680 = sqrt(r4107679);
double r4107681 = r4107679 * r4107680;
double r4107682 = r4107680 * r4107681;
double r4107683 = r4107671 / r4107682;
double r4107684 = r4107670 + r4107683;
double r4107685 = 0.5;
double r4107686 = r4107684 * r4107685;
double r4107687 = sqrt(r4107686);
return r4107687;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.0 |
|---|---|
| Target | 13.0 |
| Herbie | 14.2 |
Initial program 13.0
rmApplied add-sqr-sqrt13.0
Applied sqrt-prod13.9
rmApplied add-sqr-sqrt13.9
Applied sqrt-prod14.2
Applied associate-*r*14.2
Final simplification14.2
herbie shell --seed 2019152 +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))))))))