\frac{1}{x} - \frac{1}{\tan x}\frac{x}{\frac{\left(\left(x \cdot x\right) \cdot 0.02222222222222222307030925492199457949027\right) \cdot \left(\left(x \cdot x\right) \cdot 0.02222222222222222307030925492199457949027\right) + \left(0.3333333333333333148296162562473909929395 \cdot 0.3333333333333333148296162562473909929395 - \left(\left(x \cdot x\right) \cdot 0.02222222222222222307030925492199457949027\right) \cdot 0.3333333333333333148296162562473909929395\right)}{\left(0.3333333333333333148296162562473909929395 \cdot 0.3333333333333333148296162562473909929395\right) \cdot 0.3333333333333333148296162562473909929395 + \left(\left(x \cdot x\right) \cdot 0.02222222222222222307030925492199457949027\right) \cdot \left(\left(\left(x \cdot x\right) \cdot 0.02222222222222222307030925492199457949027\right) \cdot \left(\left(x \cdot x\right) \cdot 0.02222222222222222307030925492199457949027\right)\right)}} + 0.002116402116402116544841005563171165704262 \cdot {x}^{5}double f(double x) {
double r9043626 = 1.0;
double r9043627 = x;
double r9043628 = r9043626 / r9043627;
double r9043629 = tan(r9043627);
double r9043630 = r9043626 / r9043629;
double r9043631 = r9043628 - r9043630;
return r9043631;
}
double f(double x) {
double r9043632 = x;
double r9043633 = r9043632 * r9043632;
double r9043634 = 0.022222222222222223;
double r9043635 = r9043633 * r9043634;
double r9043636 = r9043635 * r9043635;
double r9043637 = 0.3333333333333333;
double r9043638 = r9043637 * r9043637;
double r9043639 = r9043635 * r9043637;
double r9043640 = r9043638 - r9043639;
double r9043641 = r9043636 + r9043640;
double r9043642 = r9043638 * r9043637;
double r9043643 = r9043635 * r9043636;
double r9043644 = r9043642 + r9043643;
double r9043645 = r9043641 / r9043644;
double r9043646 = r9043632 / r9043645;
double r9043647 = 0.0021164021164021165;
double r9043648 = 5.0;
double r9043649 = pow(r9043632, r9043648);
double r9043650 = r9043647 * r9043649;
double r9043651 = r9043646 + r9043650;
return r9043651;
}




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
Final simplification0.0
herbie shell --seed 2019173
(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))))