\frac{1}{x} - \frac{1}{\tan x}\mathsf{fma}\left(x \cdot x, x \cdot \frac{1}{45}, \mathsf{fma}\left(\frac{1}{3}, x, \frac{2}{945} \cdot {x}^{5}\right)\right)double f(double x) {
double r1239329 = 1.0;
double r1239330 = x;
double r1239331 = r1239329 / r1239330;
double r1239332 = tan(r1239330);
double r1239333 = r1239329 / r1239332;
double r1239334 = r1239331 - r1239333;
return r1239334;
}
double f(double x) {
double r1239335 = x;
double r1239336 = r1239335 * r1239335;
double r1239337 = 0.022222222222222223;
double r1239338 = r1239335 * r1239337;
double r1239339 = 0.3333333333333333;
double r1239340 = 0.0021164021164021165;
double r1239341 = 5.0;
double r1239342 = pow(r1239335, r1239341);
double r1239343 = r1239340 * r1239342;
double r1239344 = fma(r1239339, r1239335, r1239343);
double r1239345 = fma(r1239336, r1239338, r1239344);
return r1239345;
}




Bits error versus x
| Original | 60.0 |
|---|---|
| Target | 0.1 |
| Herbie | 0.3 |
Initial program 60.0
Taylor expanded around 0 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019156 +o rules:numerics
(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))))