\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{\left(1 + \frac{x}{\sqrt{x \cdot x + \left(p \cdot p\right) \cdot 4}}\right) \cdot 0.5}double f(double p, double x) {
double r383025 = 0.5;
double r383026 = 1.0;
double r383027 = x;
double r383028 = 4.0;
double r383029 = p;
double r383030 = r383028 * r383029;
double r383031 = r383030 * r383029;
double r383032 = r383027 * r383027;
double r383033 = r383031 + r383032;
double r383034 = sqrt(r383033);
double r383035 = r383027 / r383034;
double r383036 = r383026 + r383035;
double r383037 = r383025 * r383036;
double r383038 = sqrt(r383037);
return r383038;
}
double f(double p, double x) {
double r383039 = 1.0;
double r383040 = x;
double r383041 = r383040 * r383040;
double r383042 = p;
double r383043 = r383042 * r383042;
double r383044 = 4.0;
double r383045 = r383043 * r383044;
double r383046 = r383041 + r383045;
double r383047 = sqrt(r383046);
double r383048 = r383040 / r383047;
double r383049 = r383039 + r383048;
double r383050 = 0.5;
double r383051 = r383049 * r383050;
double r383052 = sqrt(r383051);
return r383052;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.3 |
|---|---|
| Target | 13.3 |
| Herbie | 13.3 |
Initial program 13.3
rmApplied add-cbrt-cube13.3
Simplified13.3
rmApplied rem-cbrt-cube13.3
Final simplification13.3
herbie shell --seed 2019196
(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))))))))