\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(\sqrt[3]{x \cdot \frac{1}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}} \cdot \sqrt[3]{x \cdot \frac{1}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}}\right) \cdot \sqrt[3]{x \cdot \frac{1}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}}\right)}double f(double p, double x) {
double r376086 = 0.5;
double r376087 = 1.0;
double r376088 = x;
double r376089 = 4.0;
double r376090 = p;
double r376091 = r376089 * r376090;
double r376092 = r376091 * r376090;
double r376093 = r376088 * r376088;
double r376094 = r376092 + r376093;
double r376095 = sqrt(r376094);
double r376096 = r376088 / r376095;
double r376097 = r376087 + r376096;
double r376098 = r376086 * r376097;
double r376099 = sqrt(r376098);
return r376099;
}
double f(double p, double x) {
double r376100 = 0.5;
double r376101 = 1.0;
double r376102 = x;
double r376103 = 1.0;
double r376104 = 4.0;
double r376105 = p;
double r376106 = r376104 * r376105;
double r376107 = r376106 * r376105;
double r376108 = r376102 * r376102;
double r376109 = r376107 + r376108;
double r376110 = sqrt(r376109);
double r376111 = r376103 / r376110;
double r376112 = r376102 * r376111;
double r376113 = cbrt(r376112);
double r376114 = r376113 * r376113;
double r376115 = r376114 * r376113;
double r376116 = r376101 + r376115;
double r376117 = r376100 * r376116;
double r376118 = sqrt(r376117);
return r376118;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.2 |
|---|---|
| Target | 13.2 |
| Herbie | 13.2 |
Initial program 13.2
rmApplied div-inv13.4
rmApplied add-cube-cbrt13.2
Final simplification13.2
herbie shell --seed 2020039 +o rules:numerics
(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))))))))