\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{0.5 \cdot e^{\left(\sqrt[3]{\log \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)} \cdot \sqrt[3]{\log \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\right) \cdot \sqrt[3]{\log \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}}}double f(double p, double x) {
double r158153 = 0.5;
double r158154 = 1.0;
double r158155 = x;
double r158156 = 4.0;
double r158157 = p;
double r158158 = r158156 * r158157;
double r158159 = r158158 * r158157;
double r158160 = r158155 * r158155;
double r158161 = r158159 + r158160;
double r158162 = sqrt(r158161);
double r158163 = r158155 / r158162;
double r158164 = r158154 + r158163;
double r158165 = r158153 * r158164;
double r158166 = sqrt(r158165);
return r158166;
}
double f(double p, double x) {
double r158167 = 0.5;
double r158168 = 1.0;
double r158169 = x;
double r158170 = 4.0;
double r158171 = p;
double r158172 = r158170 * r158171;
double r158173 = r158172 * r158171;
double r158174 = r158169 * r158169;
double r158175 = r158173 + r158174;
double r158176 = sqrt(r158175);
double r158177 = r158169 / r158176;
double r158178 = r158168 + r158177;
double r158179 = log(r158178);
double r158180 = cbrt(r158179);
double r158181 = r158180 * r158180;
double r158182 = r158181 * r158180;
double r158183 = exp(r158182);
double r158184 = r158167 * r158183;
double r158185 = sqrt(r158184);
return r158185;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.3 |
|---|---|
| Target | 13.3 |
| Herbie | 13.7 |
Initial program 13.3
rmApplied add-exp-log13.3
rmApplied add-cube-cbrt13.7
Final simplification13.7
herbie shell --seed 2019326
(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))))))))