\frac{1}{x} - \frac{1}{\tan x}\mathsf{fma}\left(0.02222222222222222307030925492199457949027, {x}^{3}, \mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, 0.3333333333333333148296162562473909929395 \cdot x\right)\right)double f(double x) {
double r135345 = 1.0;
double r135346 = x;
double r135347 = r135345 / r135346;
double r135348 = tan(r135346);
double r135349 = r135345 / r135348;
double r135350 = r135347 - r135349;
return r135350;
}
double f(double x) {
double r135351 = 0.022222222222222223;
double r135352 = x;
double r135353 = 3.0;
double r135354 = pow(r135352, r135353);
double r135355 = 0.0021164021164021165;
double r135356 = 5.0;
double r135357 = pow(r135352, r135356);
double r135358 = 0.3333333333333333;
double r135359 = r135358 * r135352;
double r135360 = fma(r135355, r135357, r135359);
double r135361 = fma(r135351, r135354, r135360);
return r135361;
}




Bits error versus x
| Original | 59.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.3 |
Initial program 59.9
Taylor expanded around 0 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019346 +o rules:numerics
(FPCore (x)
:name "invcot (example 3.9)"
:precision binary64
: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))))