\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 + \frac{\sqrt[3]{x}}{\frac{\left|\sqrt[3]{\left(4 \cdot p\right) \cdot p + x \cdot x}\right|}{\sqrt[3]{x}}} \cdot \frac{\sqrt[3]{x}}{\sqrt{\sqrt[3]{\left(4 \cdot p\right) \cdot p + x \cdot x}}}\right)}double f(double p, double x) {
double r149699 = 0.5;
double r149700 = 1.0;
double r149701 = x;
double r149702 = 4.0;
double r149703 = p;
double r149704 = r149702 * r149703;
double r149705 = r149704 * r149703;
double r149706 = r149701 * r149701;
double r149707 = r149705 + r149706;
double r149708 = sqrt(r149707);
double r149709 = r149701 / r149708;
double r149710 = r149700 + r149709;
double r149711 = r149699 * r149710;
double r149712 = sqrt(r149711);
return r149712;
}
double f(double p, double x) {
double r149713 = 0.5;
double r149714 = 1.0;
double r149715 = x;
double r149716 = cbrt(r149715);
double r149717 = 4.0;
double r149718 = p;
double r149719 = r149717 * r149718;
double r149720 = r149719 * r149718;
double r149721 = r149715 * r149715;
double r149722 = r149720 + r149721;
double r149723 = cbrt(r149722);
double r149724 = fabs(r149723);
double r149725 = r149724 / r149716;
double r149726 = r149716 / r149725;
double r149727 = sqrt(r149723);
double r149728 = r149716 / r149727;
double r149729 = r149726 * r149728;
double r149730 = r149714 + r149729;
double r149731 = r149713 * r149730;
double r149732 = sqrt(r149731);
return r149732;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.1 |
|---|---|
| Target | 13.1 |
| Herbie | 15.0 |
Initial program 13.1
rmApplied add-cube-cbrt14.8
Applied sqrt-prod14.9
Applied add-cube-cbrt14.9
Applied times-frac15.0
Simplified15.0
Final simplification15.0
herbie shell --seed 2019294
(FPCore (p x)
:name "Given's Rotation SVD example"
:precision binary64
:pre (< 1.00000000000000001e-150 (fabs x) 9.99999999999999981e149)
: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))))))))