\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(\left(\sqrt[3]{1 + \frac{x}{\left(\sqrt[3]{\sqrt{\mathsf{fma}\left(4, {p}^{2}, {x}^{2}\right)}} \cdot \sqrt[3]{\sqrt{\mathsf{fma}\left(4, {p}^{2}, {x}^{2}\right)}}\right) \cdot \sqrt[3]{\sqrt{\mathsf{fma}\left(4, {p}^{2}, {x}^{2}\right)}}}} \cdot \sqrt[3]{1 + \frac{x}{\sqrt{\mathsf{fma}\left(4, {p}^{2}, {x}^{2}\right)}}}\right) \cdot \sqrt[3]{1 + \frac{x}{\sqrt{\mathsf{fma}\left(4, {p}^{2}, {x}^{2}\right)}}}\right)}double f(double p, double x) {
double r150794 = 0.5;
double r150795 = 1.0;
double r150796 = x;
double r150797 = 4.0;
double r150798 = p;
double r150799 = r150797 * r150798;
double r150800 = r150799 * r150798;
double r150801 = r150796 * r150796;
double r150802 = r150800 + r150801;
double r150803 = sqrt(r150802);
double r150804 = r150796 / r150803;
double r150805 = r150795 + r150804;
double r150806 = r150794 * r150805;
double r150807 = sqrt(r150806);
return r150807;
}
double f(double p, double x) {
double r150808 = 0.5;
double r150809 = 1.0;
double r150810 = x;
double r150811 = 4.0;
double r150812 = p;
double r150813 = 2.0;
double r150814 = pow(r150812, r150813);
double r150815 = pow(r150810, r150813);
double r150816 = fma(r150811, r150814, r150815);
double r150817 = sqrt(r150816);
double r150818 = cbrt(r150817);
double r150819 = r150818 * r150818;
double r150820 = r150819 * r150818;
double r150821 = r150810 / r150820;
double r150822 = r150809 + r150821;
double r150823 = cbrt(r150822);
double r150824 = r150810 / r150817;
double r150825 = r150809 + r150824;
double r150826 = cbrt(r150825);
double r150827 = r150823 * r150826;
double r150828 = r150827 * r150826;
double r150829 = r150808 * r150828;
double r150830 = sqrt(r150829);
return r150830;
}




Bits error versus p




Bits error versus x
| Original | 13.4 |
|---|---|
| Target | 13.4 |
| Herbie | 13.6 |
Initial program 13.4
rmApplied add-cube-cbrt13.6
Simplified13.6
Simplified13.6
rmApplied add-cube-cbrt13.6
Final simplification13.6
herbie shell --seed 2019306 +o rules:numerics
(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))))))))