\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{0.5 \cdot \sqrt[3]{{\left(1 + \frac{x}{\sqrt{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}} \cdot \frac{1}{\sqrt{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}}\right)}^{3}}}double f(double p, double x) {
double r191671 = 0.5;
double r191672 = 1.0;
double r191673 = x;
double r191674 = 4.0;
double r191675 = p;
double r191676 = r191674 * r191675;
double r191677 = r191676 * r191675;
double r191678 = r191673 * r191673;
double r191679 = r191677 + r191678;
double r191680 = sqrt(r191679);
double r191681 = r191673 / r191680;
double r191682 = r191672 + r191681;
double r191683 = r191671 * r191682;
double r191684 = sqrt(r191683);
return r191684;
}
double f(double p, double x) {
double r191685 = 0.5;
double r191686 = 1.0;
double r191687 = x;
double r191688 = 4.0;
double r191689 = p;
double r191690 = r191688 * r191689;
double r191691 = r191690 * r191689;
double r191692 = r191687 * r191687;
double r191693 = r191691 + r191692;
double r191694 = sqrt(r191693);
double r191695 = sqrt(r191694);
double r191696 = r191687 / r191695;
double r191697 = 1.0;
double r191698 = r191697 / r191695;
double r191699 = r191696 * r191698;
double r191700 = r191686 + r191699;
double r191701 = 3.0;
double r191702 = pow(r191700, r191701);
double r191703 = cbrt(r191702);
double r191704 = r191685 * r191703;
double r191705 = sqrt(r191704);
return r191705;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.7 |
|---|---|
| Target | 13.7 |
| Herbie | 14.6 |
Initial program 13.7
rmApplied div-inv14.0
rmApplied add-sqr-sqrt14.0
Applied sqrt-prod14.6
Applied *-un-lft-identity14.6
Applied times-frac14.8
Applied associate-*r*14.8
Simplified14.6
rmApplied add-cbrt-cube14.6
Simplified14.6
Final simplification14.6
herbie shell --seed 2019308
(FPCore (p x)
:name "Given's Rotation SVD example"
:precision binary64
:pre (< 1.00000000000000001e-150 (fabs x) 9.99999999999999981e149)
: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))))))))