\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\frac{\sqrt{\frac{\left(0.5 \cdot \left(0.5 \cdot 0.5\right)\right) \cdot \left(\left(\frac{1}{x \cdot x + p \cdot \left(4 \cdot p\right)} \cdot \left(x \cdot x\right)\right) \cdot x\right)}{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}} + 0.5 \cdot \left(0.5 \cdot 0.5\right)}}{\sqrt{0.5 \cdot 0.5 - \left(0.5 - \frac{x \cdot 0.5}{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}}\right) \cdot \frac{x \cdot 0.5}{e^{\log \left(\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}\right)}}}}double f(double p, double x) {
double r7615292 = 0.5;
double r7615293 = 1.0;
double r7615294 = x;
double r7615295 = 4.0;
double r7615296 = p;
double r7615297 = r7615295 * r7615296;
double r7615298 = r7615297 * r7615296;
double r7615299 = r7615294 * r7615294;
double r7615300 = r7615298 + r7615299;
double r7615301 = sqrt(r7615300);
double r7615302 = r7615294 / r7615301;
double r7615303 = r7615293 + r7615302;
double r7615304 = r7615292 * r7615303;
double r7615305 = sqrt(r7615304);
return r7615305;
}
double f(double p, double x) {
double r7615306 = 0.5;
double r7615307 = r7615306 * r7615306;
double r7615308 = r7615306 * r7615307;
double r7615309 = 1.0;
double r7615310 = x;
double r7615311 = r7615310 * r7615310;
double r7615312 = p;
double r7615313 = 4.0;
double r7615314 = r7615313 * r7615312;
double r7615315 = r7615312 * r7615314;
double r7615316 = r7615311 + r7615315;
double r7615317 = r7615309 / r7615316;
double r7615318 = r7615317 * r7615311;
double r7615319 = r7615318 * r7615310;
double r7615320 = r7615308 * r7615319;
double r7615321 = sqrt(r7615316);
double r7615322 = r7615320 / r7615321;
double r7615323 = r7615322 + r7615308;
double r7615324 = sqrt(r7615323);
double r7615325 = r7615310 * r7615306;
double r7615326 = r7615325 / r7615321;
double r7615327 = r7615306 - r7615326;
double r7615328 = log(r7615321);
double r7615329 = exp(r7615328);
double r7615330 = r7615325 / r7615329;
double r7615331 = r7615327 * r7615330;
double r7615332 = r7615307 - r7615331;
double r7615333 = sqrt(r7615332);
double r7615334 = r7615324 / r7615333;
return r7615334;
}




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 flip3-+13.0
Applied sqrt-div13.0
Simplified13.0
Simplified13.0
rmApplied div-inv13.3
rmApplied add-exp-log13.3
Final simplification13.3
herbie shell --seed 2019132
(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))))))))