\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{0.5 \cdot \frac{\left(\frac{1}{x \cdot x + \left(4 \cdot p\right) \cdot p} \cdot \left(x \cdot x\right)\right) \cdot \frac{x}{\sqrt{x \cdot x + \left(4 \cdot p\right) \cdot p}} + 1 \cdot \left(1 \cdot 1\right)}{\frac{x}{\sqrt{x \cdot x + \left(4 \cdot p\right) \cdot p}} \cdot \left(\frac{x}{\sqrt{x \cdot x + \left(4 \cdot p\right) \cdot p}} - 1\right) + 1 \cdot 1}}double f(double p, double x) {
double r12891325 = 0.5;
double r12891326 = 1.0;
double r12891327 = x;
double r12891328 = 4.0;
double r12891329 = p;
double r12891330 = r12891328 * r12891329;
double r12891331 = r12891330 * r12891329;
double r12891332 = r12891327 * r12891327;
double r12891333 = r12891331 + r12891332;
double r12891334 = sqrt(r12891333);
double r12891335 = r12891327 / r12891334;
double r12891336 = r12891326 + r12891335;
double r12891337 = r12891325 * r12891336;
double r12891338 = sqrt(r12891337);
return r12891338;
}
double f(double p, double x) {
double r12891339 = 0.5;
double r12891340 = 1.0;
double r12891341 = x;
double r12891342 = r12891341 * r12891341;
double r12891343 = 4.0;
double r12891344 = p;
double r12891345 = r12891343 * r12891344;
double r12891346 = r12891345 * r12891344;
double r12891347 = r12891342 + r12891346;
double r12891348 = r12891340 / r12891347;
double r12891349 = r12891348 * r12891342;
double r12891350 = sqrt(r12891347);
double r12891351 = r12891341 / r12891350;
double r12891352 = r12891349 * r12891351;
double r12891353 = 1.0;
double r12891354 = r12891353 * r12891353;
double r12891355 = r12891353 * r12891354;
double r12891356 = r12891352 + r12891355;
double r12891357 = r12891351 - r12891353;
double r12891358 = r12891351 * r12891357;
double r12891359 = r12891358 + r12891354;
double r12891360 = r12891356 / r12891359;
double r12891361 = r12891339 * r12891360;
double r12891362 = sqrt(r12891361);
return r12891362;
}




Bits error versus p




Bits error versus x
Results
| Original | 12.9 |
|---|---|
| Target | 12.9 |
| Herbie | 13.1 |
Initial program 12.9
rmApplied clear-num12.9
rmApplied flip3-+12.9
Simplified12.9
Simplified12.9
rmApplied div-inv13.1
Final simplification13.1
herbie shell --seed 2019200
(FPCore (p x)
:name "Given's Rotation SVD example"
:pre (< 1e-150 (fabs x) 1e+150)
:herbie-target
(sqrt (+ 0.5 (/ (copysign 0.5 x) (hypot 1.0 (/ (* 2.0 p) x)))))
(sqrt (* 0.5 (+ 1.0 (/ x (sqrt (+ (* (* 4.0 p) p) (* x x))))))))