\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{0.5 \cdot \sqrt[3]{\left(\left(\frac{\frac{x}{\left|\sqrt[3]{x \cdot x + p \cdot \left(4 \cdot p\right)}\right|}}{\sqrt{\sqrt[3]{x \cdot x + p \cdot \left(4 \cdot p\right)}}} + 1\right) \cdot \left(\frac{\frac{x}{\left|\sqrt[3]{x \cdot x + p \cdot \left(4 \cdot p\right)}\right|}}{\sqrt{\sqrt[3]{x \cdot x + p \cdot \left(4 \cdot p\right)}}} + 1\right)\right) \cdot \left(\frac{\frac{x}{\left|\sqrt[3]{x \cdot x + p \cdot \left(4 \cdot p\right)}\right|}}{\sqrt{\sqrt[3]{x \cdot x + p \cdot \left(4 \cdot p\right)}}} + 1\right)}}double f(double p, double x) {
double r7943550 = 0.5;
double r7943551 = 1.0;
double r7943552 = x;
double r7943553 = 4.0;
double r7943554 = p;
double r7943555 = r7943553 * r7943554;
double r7943556 = r7943555 * r7943554;
double r7943557 = r7943552 * r7943552;
double r7943558 = r7943556 + r7943557;
double r7943559 = sqrt(r7943558);
double r7943560 = r7943552 / r7943559;
double r7943561 = r7943551 + r7943560;
double r7943562 = r7943550 * r7943561;
double r7943563 = sqrt(r7943562);
return r7943563;
}
double f(double p, double x) {
double r7943564 = 0.5;
double r7943565 = x;
double r7943566 = r7943565 * r7943565;
double r7943567 = p;
double r7943568 = 4.0;
double r7943569 = r7943568 * r7943567;
double r7943570 = r7943567 * r7943569;
double r7943571 = r7943566 + r7943570;
double r7943572 = cbrt(r7943571);
double r7943573 = fabs(r7943572);
double r7943574 = r7943565 / r7943573;
double r7943575 = sqrt(r7943572);
double r7943576 = r7943574 / r7943575;
double r7943577 = 1.0;
double r7943578 = r7943576 + r7943577;
double r7943579 = r7943578 * r7943578;
double r7943580 = r7943579 * r7943578;
double r7943581 = cbrt(r7943580);
double r7943582 = r7943564 * r7943581;
double r7943583 = sqrt(r7943582);
return r7943583;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.1 |
|---|---|
| Target | 13.1 |
| Herbie | 14.6 |
Initial program 13.1
rmApplied add-cube-cbrt14.7
Applied sqrt-prod14.6
Applied associate-/r*14.6
Simplified14.6
rmApplied add-cbrt-cube14.6
Final simplification14.6
herbie shell --seed 2019171
(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))))))))