\frac{1}{x} - \frac{1}{\tan x}\mathsf{fma}\left(0.02222222222222222307030925492199457949027, \left(x \cdot x\right) \cdot x, \mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, x \cdot 0.3333333333333333148296162562473909929395\right)\right)double f(double x) {
double r2994219 = 1.0;
double r2994220 = x;
double r2994221 = r2994219 / r2994220;
double r2994222 = tan(r2994220);
double r2994223 = r2994219 / r2994222;
double r2994224 = r2994221 - r2994223;
return r2994224;
}
double f(double x) {
double r2994225 = 0.022222222222222223;
double r2994226 = x;
double r2994227 = r2994226 * r2994226;
double r2994228 = r2994227 * r2994226;
double r2994229 = 0.0021164021164021165;
double r2994230 = 5.0;
double r2994231 = pow(r2994226, r2994230);
double r2994232 = 0.3333333333333333;
double r2994233 = r2994226 * r2994232;
double r2994234 = fma(r2994229, r2994231, r2994233);
double r2994235 = fma(r2994225, r2994228, r2994234);
return r2994235;
}




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 2019172 +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))))