\frac{1}{x} - \frac{1}{\tan x}0.02222222222222222307030925492199457949027 \cdot {x}^{3} + \left(0.002116402116402116544841005563171165704262 \cdot {x}^{5} + 0.3333333333333333148296162562473909929395 \cdot x\right)double f(double x) {
double r96793 = 1.0;
double r96794 = x;
double r96795 = r96793 / r96794;
double r96796 = tan(r96794);
double r96797 = r96793 / r96796;
double r96798 = r96795 - r96797;
return r96798;
}
double f(double x) {
double r96799 = 0.022222222222222223;
double r96800 = x;
double r96801 = 3.0;
double r96802 = pow(r96800, r96801);
double r96803 = r96799 * r96802;
double r96804 = 0.0021164021164021165;
double r96805 = 5.0;
double r96806 = pow(r96800, r96805);
double r96807 = r96804 * r96806;
double r96808 = 0.3333333333333333;
double r96809 = r96808 * r96800;
double r96810 = r96807 + r96809;
double r96811 = r96803 + r96810;
return r96811;
}




Bits error versus x
Results
| Original | 59.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.3 |
Initial program 59.9
Taylor expanded around 0 0.3
Final simplification0.3
herbie shell --seed 2019325
(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))))