\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 r140836 = 1.0;
double r140837 = x;
double r140838 = r140836 / r140837;
double r140839 = tan(r140837);
double r140840 = r140836 / r140839;
double r140841 = r140838 - r140840;
return r140841;
}
double f(double x) {
double r140842 = 0.022222222222222223;
double r140843 = x;
double r140844 = 3.0;
double r140845 = pow(r140843, r140844);
double r140846 = 0.0021164021164021165;
double r140847 = 5.0;
double r140848 = pow(r140843, r140847);
double r140849 = 0.3333333333333333;
double r140850 = r140849 * r140843;
double r140851 = fma(r140846, r140848, r140850);
double r140852 = fma(r140842, r140845, r140851);
return r140852;
}




Bits error versus x
| Original | 59.8 |
|---|---|
| Target | 0.1 |
| Herbie | 0.3 |
Initial program 59.8
Taylor expanded around 0 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020081 +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))))