\frac{1}{x} - \frac{1}{\tan x}\frac{x}{\frac{\frac{-1}{135} \cdot \left(x \cdot x\right) + \left(\frac{1}{9} + \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \frac{1}{2025}\right)}{\frac{1}{27} + \left(x \cdot x\right) \cdot \left(\frac{1}{91125} \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)\right)}} + {x}^{5} \cdot \frac{2}{945}double f(double x) {
double r3001439 = 1.0;
double r3001440 = x;
double r3001441 = r3001439 / r3001440;
double r3001442 = tan(r3001440);
double r3001443 = r3001439 / r3001442;
double r3001444 = r3001441 - r3001443;
return r3001444;
}
double f(double x) {
double r3001445 = x;
double r3001446 = -0.007407407407407408;
double r3001447 = r3001445 * r3001445;
double r3001448 = r3001446 * r3001447;
double r3001449 = 0.1111111111111111;
double r3001450 = r3001447 * r3001447;
double r3001451 = 0.0004938271604938272;
double r3001452 = r3001450 * r3001451;
double r3001453 = r3001449 + r3001452;
double r3001454 = r3001448 + r3001453;
double r3001455 = 0.037037037037037035;
double r3001456 = 1.0973936899862826e-05;
double r3001457 = r3001456 * r3001450;
double r3001458 = r3001447 * r3001457;
double r3001459 = r3001455 + r3001458;
double r3001460 = r3001454 / r3001459;
double r3001461 = r3001445 / r3001460;
double r3001462 = 5.0;
double r3001463 = pow(r3001445, r3001462);
double r3001464 = 0.0021164021164021165;
double r3001465 = r3001463 * r3001464;
double r3001466 = r3001461 + r3001465;
return r3001466;
}




Bits error versus x
Results
| Original | 59.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
Initial program 59.9
Taylor expanded around 0 0.3
Simplified0.3
rmApplied flip3-+1.2
Applied associate-*r/1.1
Simplified0.3
rmApplied associate-/l*0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019142
(FPCore (x)
:name "invcot (example 3.9)"
: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))))