\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt[3]{\sqrt{\log \left(e^{0.5 + x \cdot \frac{0.5}{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}}}\right)} \cdot \left(0.5 + x \cdot \frac{0.5}{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}}\right)}double f(double p, double x) {
double r95242972 = 0.5;
double r95242973 = 1.0;
double r95242974 = x;
double r95242975 = 4.0;
double r95242976 = p;
double r95242977 = r95242975 * r95242976;
double r95242978 = r95242977 * r95242976;
double r95242979 = r95242974 * r95242974;
double r95242980 = r95242978 + r95242979;
double r95242981 = sqrt(r95242980);
double r95242982 = r95242974 / r95242981;
double r95242983 = r95242973 + r95242982;
double r95242984 = r95242972 * r95242983;
double r95242985 = sqrt(r95242984);
return r95242985;
}
double f(double p, double x) {
double r95242986 = 0.5;
double r95242987 = x;
double r95242988 = r95242987 * r95242987;
double r95242989 = p;
double r95242990 = 4.0;
double r95242991 = r95242989 * r95242990;
double r95242992 = r95242989 * r95242991;
double r95242993 = r95242988 + r95242992;
double r95242994 = sqrt(r95242993);
double r95242995 = r95242986 / r95242994;
double r95242996 = r95242987 * r95242995;
double r95242997 = r95242986 + r95242996;
double r95242998 = exp(r95242997);
double r95242999 = log(r95242998);
double r95243000 = sqrt(r95242999);
double r95243001 = r95243000 * r95242997;
double r95243002 = cbrt(r95243001);
return r95243002;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.7 |
|---|---|
| Target | 13.7 |
| Herbie | 13.7 |
Initial program 13.7
Simplified13.7
rmApplied add-cbrt-cube13.7
Simplified14.0
rmApplied add-log-exp13.7
Final simplification13.7
herbie shell --seed 2019125
(FPCore (p x)
:name "Given's Rotation SVD example"
:pre (< 1e-150 (fabs x) 1e+150)
:herbie-target
(sqrt (+ 1/2 (/ (copysign 1/2 x) (hypot 1 (/ (* 2 p) x)))))
(sqrt (* 0.5 (+ 1 (/ x (sqrt (+ (* (* 4 p) p) (* x x))))))))