\frac{1}{x} - \frac{1}{\tan x}\mathsf{fma}\left(0.0222222222222222231, {x}^{3}, \mathsf{fma}\left(0.00211640211640211654, {x}^{5}, 0.333333333333333315 \cdot x\right)\right)double f(double x) {
double r142303 = 1.0;
double r142304 = x;
double r142305 = r142303 / r142304;
double r142306 = tan(r142304);
double r142307 = r142303 / r142306;
double r142308 = r142305 - r142307;
return r142308;
}
double f(double x) {
double r142309 = 0.022222222222222223;
double r142310 = x;
double r142311 = 3.0;
double r142312 = pow(r142310, r142311);
double r142313 = 0.0021164021164021165;
double r142314 = 5.0;
double r142315 = pow(r142310, r142314);
double r142316 = 0.3333333333333333;
double r142317 = r142316 * r142310;
double r142318 = fma(r142313, r142315, r142317);
double r142319 = fma(r142309, r142312, r142318);
return r142319;
}




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 2019198 +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.0) (+ 1.0 (/ (* x x) 15.0))) (- (/ 1.0 x) (/ 1.0 (tan x))))
(- (/ 1.0 x) (/ 1.0 (tan x))))