\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{0.5 \cdot \left(1 + \left(x \cdot \sqrt{\frac{1}{\sqrt{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}} \cdot \sqrt{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}}}\right) \cdot \sqrt{\frac{1}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}}\right)}double f(double p, double x) {
double r237505 = 0.5;
double r237506 = 1.0;
double r237507 = x;
double r237508 = 4.0;
double r237509 = p;
double r237510 = r237508 * r237509;
double r237511 = r237510 * r237509;
double r237512 = r237507 * r237507;
double r237513 = r237511 + r237512;
double r237514 = sqrt(r237513);
double r237515 = r237507 / r237514;
double r237516 = r237506 + r237515;
double r237517 = r237505 * r237516;
double r237518 = sqrt(r237517);
return r237518;
}
double f(double p, double x) {
double r237519 = 0.5;
double r237520 = 1.0;
double r237521 = x;
double r237522 = 1.0;
double r237523 = 4.0;
double r237524 = p;
double r237525 = r237523 * r237524;
double r237526 = r237525 * r237524;
double r237527 = r237521 * r237521;
double r237528 = r237526 + r237527;
double r237529 = sqrt(r237528);
double r237530 = sqrt(r237529);
double r237531 = r237530 * r237530;
double r237532 = r237522 / r237531;
double r237533 = sqrt(r237532);
double r237534 = r237521 * r237533;
double r237535 = r237522 / r237529;
double r237536 = sqrt(r237535);
double r237537 = r237534 * r237536;
double r237538 = r237520 + r237537;
double r237539 = r237519 * r237538;
double r237540 = sqrt(r237539);
return r237540;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.2 |
|---|---|
| Target | 13.2 |
| Herbie | 14.0 |
Initial program 13.2
rmApplied div-inv13.4
rmApplied add-sqr-sqrt14.1
Applied associate-*r*14.1
rmApplied add-sqr-sqrt14.1
Applied sqrt-prod14.0
Final simplification14.0
herbie shell --seed 2020043
(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))))))))