\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{\frac{x}{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}} \cdot \frac{\frac{x \cdot x}{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}}}{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}} + \left(1 \cdot 1\right) \cdot 1}{\frac{x}{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}} \cdot \left(\frac{x}{\sqrt{x \cdot x + p \cdot \left(4 \cdot p\right)}} - 1\right) + 1 \cdot 1}}double f(double p, double x) {
double r10375565 = 0.5;
double r10375566 = 1.0;
double r10375567 = x;
double r10375568 = 4.0;
double r10375569 = p;
double r10375570 = r10375568 * r10375569;
double r10375571 = r10375570 * r10375569;
double r10375572 = r10375567 * r10375567;
double r10375573 = r10375571 + r10375572;
double r10375574 = sqrt(r10375573);
double r10375575 = r10375567 / r10375574;
double r10375576 = r10375566 + r10375575;
double r10375577 = r10375565 * r10375576;
double r10375578 = sqrt(r10375577);
return r10375578;
}
double f(double p, double x) {
double r10375579 = 0.5;
double r10375580 = x;
double r10375581 = r10375580 * r10375580;
double r10375582 = p;
double r10375583 = 4.0;
double r10375584 = r10375583 * r10375582;
double r10375585 = r10375582 * r10375584;
double r10375586 = r10375581 + r10375585;
double r10375587 = sqrt(r10375586);
double r10375588 = r10375580 / r10375587;
double r10375589 = r10375581 / r10375587;
double r10375590 = r10375589 / r10375587;
double r10375591 = r10375588 * r10375590;
double r10375592 = 1.0;
double r10375593 = r10375592 * r10375592;
double r10375594 = r10375593 * r10375592;
double r10375595 = r10375591 + r10375594;
double r10375596 = r10375588 - r10375592;
double r10375597 = r10375588 * r10375596;
double r10375598 = r10375597 + r10375593;
double r10375599 = r10375595 / r10375598;
double r10375600 = r10375579 * r10375599;
double r10375601 = sqrt(r10375600);
return r10375601;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.4 |
|---|---|
| Target | 13.4 |
| Herbie | 13.5 |
Initial program 13.4
rmApplied flip3-+13.4
Simplified13.4
Simplified13.4
rmApplied add-sqr-sqrt13.4
Applied associate-/r*13.5
Final simplification13.5
herbie shell --seed 2019192
(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))))))))