\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{0.5 \cdot \frac{{1}^{3} + {\left(\frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}^{3}}{1 \cdot \left(1 - \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right) + \frac{x}{\sqrt[3]{4 \cdot {p}^{2} + {x}^{2}} \cdot \sqrt[3]{4 \cdot {p}^{2} + {x}^{2}}} \cdot \frac{x}{\sqrt[3]{4 \cdot {p}^{2} + {x}^{2}}}}}double f(double p, double x) {
double r226622 = 0.5;
double r226623 = 1.0;
double r226624 = x;
double r226625 = 4.0;
double r226626 = p;
double r226627 = r226625 * r226626;
double r226628 = r226627 * r226626;
double r226629 = r226624 * r226624;
double r226630 = r226628 + r226629;
double r226631 = sqrt(r226630);
double r226632 = r226624 / r226631;
double r226633 = r226623 + r226632;
double r226634 = r226622 * r226633;
double r226635 = sqrt(r226634);
return r226635;
}
double f(double p, double x) {
double r226636 = 0.5;
double r226637 = 1.0;
double r226638 = 3.0;
double r226639 = pow(r226637, r226638);
double r226640 = x;
double r226641 = 4.0;
double r226642 = p;
double r226643 = r226641 * r226642;
double r226644 = r226643 * r226642;
double r226645 = r226640 * r226640;
double r226646 = r226644 + r226645;
double r226647 = sqrt(r226646);
double r226648 = r226640 / r226647;
double r226649 = pow(r226648, r226638);
double r226650 = r226639 + r226649;
double r226651 = r226637 - r226648;
double r226652 = r226637 * r226651;
double r226653 = 2.0;
double r226654 = pow(r226642, r226653);
double r226655 = r226641 * r226654;
double r226656 = pow(r226640, r226653);
double r226657 = r226655 + r226656;
double r226658 = cbrt(r226657);
double r226659 = r226658 * r226658;
double r226660 = r226640 / r226659;
double r226661 = r226640 / r226658;
double r226662 = r226660 * r226661;
double r226663 = r226652 + r226662;
double r226664 = r226650 / r226663;
double r226665 = r226636 * r226664;
double r226666 = sqrt(r226665);
return r226666;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.4 |
|---|---|
| Target | 13.5 |
| Herbie | 13.7 |
Initial program 13.4
rmApplied flip3-+13.5
Simplified13.5
rmApplied add-cube-cbrt13.7
Applied times-frac13.7
Final simplification13.7
herbie shell --seed 2019350
(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))))))))