\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 \sqrt[3]{x}\right) \cdot \frac{\sqrt[3]{x}}{\left(\sqrt[3]{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}} \cdot \sqrt[3]{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right) \cdot \sqrt[3]{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}}\right)}double f(double p, double x) {
double r8976099 = 0.5;
double r8976100 = 1.0;
double r8976101 = x;
double r8976102 = 4.0;
double r8976103 = p;
double r8976104 = r8976102 * r8976103;
double r8976105 = r8976104 * r8976103;
double r8976106 = r8976101 * r8976101;
double r8976107 = r8976105 + r8976106;
double r8976108 = sqrt(r8976107);
double r8976109 = r8976101 / r8976108;
double r8976110 = r8976100 + r8976109;
double r8976111 = r8976099 * r8976110;
double r8976112 = sqrt(r8976111);
return r8976112;
}
double f(double p, double x) {
double r8976113 = 0.5;
double r8976114 = 1.0;
double r8976115 = x;
double r8976116 = cbrt(r8976115);
double r8976117 = r8976116 * r8976116;
double r8976118 = 4.0;
double r8976119 = p;
double r8976120 = r8976118 * r8976119;
double r8976121 = r8976120 * r8976119;
double r8976122 = r8976115 * r8976115;
double r8976123 = r8976121 + r8976122;
double r8976124 = sqrt(r8976123);
double r8976125 = cbrt(r8976124);
double r8976126 = r8976125 * r8976125;
double r8976127 = r8976126 * r8976125;
double r8976128 = r8976116 / r8976127;
double r8976129 = r8976117 * r8976128;
double r8976130 = r8976114 + r8976129;
double r8976131 = r8976113 * r8976130;
double r8976132 = sqrt(r8976131);
return r8976132;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.1 |
|---|---|
| Target | 13.1 |
| Herbie | 13.5 |
Initial program 13.1
rmApplied *-un-lft-identity13.1
Applied sqrt-prod13.1
Applied add-cube-cbrt15.0
Applied times-frac14.9
Simplified14.9
rmApplied add-cube-cbrt13.5
Final simplification13.5
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))))))))