\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{0.5 \cdot \log \left(e^{1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}}\right)}double f(double p, double x) {
double r267474 = 0.5;
double r267475 = 1.0;
double r267476 = x;
double r267477 = 4.0;
double r267478 = p;
double r267479 = r267477 * r267478;
double r267480 = r267479 * r267478;
double r267481 = r267476 * r267476;
double r267482 = r267480 + r267481;
double r267483 = sqrt(r267482);
double r267484 = r267476 / r267483;
double r267485 = r267475 + r267484;
double r267486 = r267474 * r267485;
double r267487 = sqrt(r267486);
return r267487;
}
double f(double p, double x) {
double r267488 = 0.5;
double r267489 = 1.0;
double r267490 = x;
double r267491 = 4.0;
double r267492 = p;
double r267493 = r267491 * r267492;
double r267494 = r267493 * r267492;
double r267495 = r267490 * r267490;
double r267496 = r267494 + r267495;
double r267497 = sqrt(r267496);
double r267498 = r267490 / r267497;
double r267499 = r267489 + r267498;
double r267500 = exp(r267499);
double r267501 = log(r267500);
double r267502 = r267488 * r267501;
double r267503 = sqrt(r267502);
return r267503;
}




Bits error versus p




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