\frac{1}{x} - \frac{1}{\tan x}\left(\left(x \cdot \sqrt{\sqrt[3]{\sqrt{\frac{1}{3}}} \cdot \sqrt[3]{\sqrt{\frac{1}{3}}}}\right) \cdot \left(\sqrt{\frac{1}{3}} \cdot \left(\sqrt{\sqrt[3]{\sqrt{\frac{1}{3}}}} \cdot \sqrt{\sqrt{\frac{1}{3}}}\right)\right) + {x}^{5} \cdot \frac{2}{945}\right) + \left(\left(x \cdot x\right) \cdot x\right) \cdot \frac{1}{45}double f(double x) {
double r4620673 = 1.0;
double r4620674 = x;
double r4620675 = r4620673 / r4620674;
double r4620676 = tan(r4620674);
double r4620677 = r4620673 / r4620676;
double r4620678 = r4620675 - r4620677;
return r4620678;
}
double f(double x) {
double r4620679 = x;
double r4620680 = 0.3333333333333333;
double r4620681 = sqrt(r4620680);
double r4620682 = cbrt(r4620681);
double r4620683 = r4620682 * r4620682;
double r4620684 = sqrt(r4620683);
double r4620685 = r4620679 * r4620684;
double r4620686 = sqrt(r4620682);
double r4620687 = sqrt(r4620681);
double r4620688 = r4620686 * r4620687;
double r4620689 = r4620681 * r4620688;
double r4620690 = r4620685 * r4620689;
double r4620691 = 5.0;
double r4620692 = pow(r4620679, r4620691);
double r4620693 = 0.0021164021164021165;
double r4620694 = r4620692 * r4620693;
double r4620695 = r4620690 + r4620694;
double r4620696 = r4620679 * r4620679;
double r4620697 = r4620696 * r4620679;
double r4620698 = 0.022222222222222223;
double r4620699 = r4620697 * r4620698;
double r4620700 = r4620695 + r4620699;
return r4620700;
}




Bits error versus x
Results
| Original | 59.8 |
|---|---|
| Target | 0.1 |
| Herbie | 0.3 |
Initial program 59.8
Taylor expanded around 0 0.3
Simplified0.3
rmApplied add-sqr-sqrt0.3
Applied associate-*r*0.7
rmApplied add-sqr-sqrt0.7
Applied sqrt-prod0.7
Applied associate-*r*0.5
rmApplied add-cube-cbrt0.5
Applied sqrt-prod0.5
Applied associate-*r*0.5
Applied associate-*l*0.4
Applied associate-*l*0.3
Final simplification0.3
herbie shell --seed 2019158
(FPCore (x)
:name "invcot (example 3.9)"
:pre (and (< -0.026 x) (< x 0.026))
:herbie-target
(if (< (fabs x) 0.026) (* (/ x 3) (+ 1 (/ (* x x) 15))) (- (/ 1 x) (/ 1 (tan x))))
(- (/ 1 x) (/ 1 (tan x))))