\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{\left(\sqrt[3]{\log \left(e^{0.5 + \frac{0.5}{\frac{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}}{x}}}\right)} \cdot \sqrt[3]{\log \left(e^{0.5 + \frac{0.5}{\frac{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}}{x}}}\right)}\right) \cdot \sqrt[3]{\log \left(e^{0.5 + \frac{0.5}{\frac{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}}{x}}}\right)}}double f(double p, double x) {
double r3679796 = 0.5;
double r3679797 = 1.0;
double r3679798 = x;
double r3679799 = 4.0;
double r3679800 = p;
double r3679801 = r3679799 * r3679800;
double r3679802 = r3679801 * r3679800;
double r3679803 = r3679798 * r3679798;
double r3679804 = r3679802 + r3679803;
double r3679805 = sqrt(r3679804);
double r3679806 = r3679798 / r3679805;
double r3679807 = r3679797 + r3679806;
double r3679808 = r3679796 * r3679807;
double r3679809 = sqrt(r3679808);
return r3679809;
}
double f(double p, double x) {
double r3679810 = 0.5;
double r3679811 = x;
double r3679812 = r3679811 * r3679811;
double r3679813 = p;
double r3679814 = 4.0;
double r3679815 = r3679814 * r3679813;
double r3679816 = r3679813 * r3679815;
double r3679817 = r3679812 + r3679816;
double r3679818 = sqrt(r3679817);
double r3679819 = r3679818 / r3679811;
double r3679820 = r3679810 / r3679819;
double r3679821 = r3679810 + r3679820;
double r3679822 = exp(r3679821);
double r3679823 = log(r3679822);
double r3679824 = cbrt(r3679823);
double r3679825 = r3679824 * r3679824;
double r3679826 = r3679825 * r3679824;
double r3679827 = sqrt(r3679826);
return r3679827;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.6 |
|---|---|
| Target | 13.6 |
| Herbie | 13.6 |
Initial program 13.6
Simplified13.6
rmApplied add-log-exp13.6
Applied add-log-exp13.6
Applied sum-log13.6
Simplified13.6
rmApplied add-cube-cbrt13.6
Final simplification13.6
herbie shell --seed 2019144
(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))))))))