\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{\sqrt[3]{\left(\frac{x}{\sqrt{x \cdot x + \left(p \cdot p\right) \cdot 4}} \cdot 0.5\right) \cdot \left(\left(\frac{x}{\sqrt{x \cdot x + \left(p \cdot p\right) \cdot 4}} \cdot 0.5\right) \cdot \left(\frac{x}{\sqrt{x \cdot x + \left(p \cdot p\right) \cdot 4}} \cdot 0.5\right)\right)} + 0.5}double f(double p, double x) {
double r7949683 = 0.5;
double r7949684 = 1.0;
double r7949685 = x;
double r7949686 = 4.0;
double r7949687 = p;
double r7949688 = r7949686 * r7949687;
double r7949689 = r7949688 * r7949687;
double r7949690 = r7949685 * r7949685;
double r7949691 = r7949689 + r7949690;
double r7949692 = sqrt(r7949691);
double r7949693 = r7949685 / r7949692;
double r7949694 = r7949684 + r7949693;
double r7949695 = r7949683 * r7949694;
double r7949696 = sqrt(r7949695);
return r7949696;
}
double f(double p, double x) {
double r7949697 = x;
double r7949698 = r7949697 * r7949697;
double r7949699 = p;
double r7949700 = r7949699 * r7949699;
double r7949701 = 4.0;
double r7949702 = r7949700 * r7949701;
double r7949703 = r7949698 + r7949702;
double r7949704 = sqrt(r7949703);
double r7949705 = r7949697 / r7949704;
double r7949706 = 0.5;
double r7949707 = r7949705 * r7949706;
double r7949708 = r7949707 * r7949707;
double r7949709 = r7949707 * r7949708;
double r7949710 = cbrt(r7949709);
double r7949711 = r7949710 + r7949706;
double r7949712 = sqrt(r7949711);
return r7949712;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.1 |
|---|---|
| Target | 13.1 |
| Herbie | 14.8 |
Initial program 13.1
Simplified13.1
rmApplied add-cbrt-cube14.8
Final simplification14.8
herbie shell --seed 2019143
(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))))))))