\frac{1}{x} - \frac{1}{\tan x}0.002116402116402116544841005563171165704262 \cdot {x}^{5} + \left(x \cdot 0.3333333333333333148296162562473909929395 + {x}^{3} \cdot 0.02222222222222222307030925492199457949027\right)double f(double x) {
double r88296 = 1.0;
double r88297 = x;
double r88298 = r88296 / r88297;
double r88299 = tan(r88297);
double r88300 = r88296 / r88299;
double r88301 = r88298 - r88300;
return r88301;
}
double f(double x) {
double r88302 = 0.0021164021164021165;
double r88303 = x;
double r88304 = 5.0;
double r88305 = pow(r88303, r88304);
double r88306 = r88302 * r88305;
double r88307 = 0.3333333333333333;
double r88308 = r88303 * r88307;
double r88309 = 3.0;
double r88310 = pow(r88303, r88309);
double r88311 = 0.022222222222222223;
double r88312 = r88310 * r88311;
double r88313 = r88308 + r88312;
double r88314 = r88306 + r88313;
return r88314;
}




Bits error versus x
Results
| Original | 59.8 |
|---|---|
| Target | 0.1 |
| Herbie | 0.4 |
Initial program 59.8
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019174
(FPCore (x)
:name "invcot (example 3.9)"
:pre (and (< -0.026 x) (< x 0.026))
:herbie-target
(if (< (fabs x) 0.026) (* (/ x 3.0) (+ 1.0 (/ (* x x) 15.0))) (- (/ 1.0 x) (/ 1.0 (tan x))))
(- (/ 1.0 x) (/ 1.0 (tan x))))