\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{e^{\log \left({\left(\left({\left(x \cdot x + p \cdot \left(p \cdot 4\right)\right)}^{\left(-\frac{1}{2}\right)} \cdot x\right) \cdot 0.5\right)}^{3} + {0.5}^{3}\right) - \log \left(\left(0.5 \cdot 0.5 - \left(\left({\left(x \cdot x + p \cdot \left(p \cdot 4\right)\right)}^{\left(-\frac{1}{2}\right)} \cdot x\right) \cdot 0.5\right) \cdot 0.5\right) + \left(\left({\left(x \cdot x + p \cdot \left(p \cdot 4\right)\right)}^{\left(-\frac{1}{2}\right)} \cdot x\right) \cdot 0.5\right) \cdot \left(\left({\left(x \cdot x + p \cdot \left(p \cdot 4\right)\right)}^{\left(-\frac{1}{2}\right)} \cdot x\right) \cdot 0.5\right)\right)}}double f(double p, double x) {
double r9068213 = 0.5;
double r9068214 = 1.0;
double r9068215 = x;
double r9068216 = 4.0;
double r9068217 = p;
double r9068218 = r9068216 * r9068217;
double r9068219 = r9068218 * r9068217;
double r9068220 = r9068215 * r9068215;
double r9068221 = r9068219 + r9068220;
double r9068222 = sqrt(r9068221);
double r9068223 = r9068215 / r9068222;
double r9068224 = r9068214 + r9068223;
double r9068225 = r9068213 * r9068224;
double r9068226 = sqrt(r9068225);
return r9068226;
}
double f(double p, double x) {
double r9068227 = x;
double r9068228 = r9068227 * r9068227;
double r9068229 = p;
double r9068230 = 4.0;
double r9068231 = r9068229 * r9068230;
double r9068232 = r9068229 * r9068231;
double r9068233 = r9068228 + r9068232;
double r9068234 = 0.5;
double r9068235 = -r9068234;
double r9068236 = pow(r9068233, r9068235);
double r9068237 = r9068236 * r9068227;
double r9068238 = 0.5;
double r9068239 = r9068237 * r9068238;
double r9068240 = 3.0;
double r9068241 = pow(r9068239, r9068240);
double r9068242 = pow(r9068238, r9068240);
double r9068243 = r9068241 + r9068242;
double r9068244 = log(r9068243);
double r9068245 = r9068238 * r9068238;
double r9068246 = r9068239 * r9068238;
double r9068247 = r9068245 - r9068246;
double r9068248 = r9068239 * r9068239;
double r9068249 = r9068247 + r9068248;
double r9068250 = log(r9068249);
double r9068251 = r9068244 - r9068250;
double r9068252 = exp(r9068251);
double r9068253 = sqrt(r9068252);
return r9068253;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.0 |
|---|---|
| Target | 13.0 |
| Herbie | 13.3 |
Initial program 13.0
Simplified13.0
rmApplied div-inv13.3
rmApplied pow1/213.3
Applied pow-flip13.3
rmApplied add-exp-log13.3
rmApplied flip3-+13.3
Applied log-div13.3
Final simplification13.3
herbie shell --seed 2019134
(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))))))))