\frac{1}{x} - \frac{1}{\tan x}\log \left({\left(e^{{x}^{5}}\right)}^{0.002116402116402116544841005563171165704262}\right) + \left(0.3333333333333333148296162562473909929395 \cdot x + {x}^{3} \cdot 0.02222222222222222307030925492199457949027\right)double f(double x) {
double r82138 = 1.0;
double r82139 = x;
double r82140 = r82138 / r82139;
double r82141 = tan(r82139);
double r82142 = r82138 / r82141;
double r82143 = r82140 - r82142;
return r82143;
}
double f(double x) {
double r82144 = x;
double r82145 = 5.0;
double r82146 = pow(r82144, r82145);
double r82147 = exp(r82146);
double r82148 = 0.0021164021164021165;
double r82149 = pow(r82147, r82148);
double r82150 = log(r82149);
double r82151 = 0.3333333333333333;
double r82152 = r82151 * r82144;
double r82153 = 3.0;
double r82154 = pow(r82144, r82153);
double r82155 = 0.022222222222222223;
double r82156 = r82154 * r82155;
double r82157 = r82152 + r82156;
double r82158 = r82150 + r82157;
return r82158;
}




Bits error versus x
Results
| Original | 59.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.4 |
Initial program 59.9
Taylor expanded around 0 0.3
Simplified0.3
rmApplied add-log-exp0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019196
(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))))