\frac{1}{x} - \frac{1}{\tan x}\mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, \frac{x}{\frac{\frac{1}{\frac{\mathsf{fma}\left(0.02222222222222222307030925492199457949027, x \cdot x, 0.3333333333333333148296162562473909929395\right)}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}\right)double f(double x) {
double r4465685 = 1.0;
double r4465686 = x;
double r4465687 = r4465685 / r4465686;
double r4465688 = tan(r4465686);
double r4465689 = r4465685 / r4465688;
double r4465690 = r4465687 - r4465689;
return r4465690;
}
double f(double x) {
double r4465691 = 0.0021164021164021165;
double r4465692 = x;
double r4465693 = 5.0;
double r4465694 = pow(r4465692, r4465693);
double r4465695 = 1.0;
double r4465696 = 0.022222222222222223;
double r4465697 = r4465692 * r4465692;
double r4465698 = 0.3333333333333333;
double r4465699 = fma(r4465696, r4465697, r4465698);
double r4465700 = r4465696 * r4465697;
double r4465701 = r4465698 - r4465700;
double r4465702 = r4465699 / r4465701;
double r4465703 = r4465695 / r4465702;
double r4465704 = r4465703 / r4465701;
double r4465705 = r4465692 / r4465704;
double r4465706 = fma(r4465691, r4465694, r4465705);
return r4465706;
}




Bits error versus x
| Original | 59.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
Initial program 59.9
Taylor expanded around 0 0.3
Simplified0.3
rmApplied flip-+0.3
Applied associate-*r/0.3
rmApplied associate-/l*0.0
Simplified0.0
rmApplied clear-num0.0
Final simplification0.0
herbie shell --seed 2019171 +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))))