\frac{1}{x} - \frac{1}{\tan x}{x}^{5} \cdot \frac{2}{945} + \frac{\frac{1}{91125} \cdot \left(\left(\left(x \cdot x\right) \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot x\right)\right) + \frac{1}{27}}{\frac{\left(\frac{1}{9} - \left(x \cdot x\right) \cdot \frac{1}{135}\right) + \frac{1}{2025} \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)}{x}}double f(double x) {
double r1174885 = 1.0;
double r1174886 = x;
double r1174887 = r1174885 / r1174886;
double r1174888 = tan(r1174886);
double r1174889 = r1174885 / r1174888;
double r1174890 = r1174887 - r1174889;
return r1174890;
}
double f(double x) {
double r1174891 = x;
double r1174892 = 5.0;
double r1174893 = pow(r1174891, r1174892);
double r1174894 = 0.0021164021164021165;
double r1174895 = r1174893 * r1174894;
double r1174896 = 1.0973936899862826e-05;
double r1174897 = r1174891 * r1174891;
double r1174898 = r1174897 * r1174891;
double r1174899 = r1174898 * r1174898;
double r1174900 = r1174896 * r1174899;
double r1174901 = 0.037037037037037035;
double r1174902 = r1174900 + r1174901;
double r1174903 = 0.1111111111111111;
double r1174904 = 0.007407407407407408;
double r1174905 = r1174897 * r1174904;
double r1174906 = r1174903 - r1174905;
double r1174907 = 0.0004938271604938272;
double r1174908 = r1174897 * r1174897;
double r1174909 = r1174907 * r1174908;
double r1174910 = r1174906 + r1174909;
double r1174911 = r1174910 / r1174891;
double r1174912 = r1174902 / r1174911;
double r1174913 = r1174895 + r1174912;
return r1174913;
}




Bits error versus x
Results
| Original | 60.0 |
|---|---|
| Target | 0.1 |
| Herbie | 0.3 |
Initial program 60.0
Taylor expanded around 0 0.3
Simplified0.3
rmApplied flip3-+1.2
Applied associate-*r/1.1
Simplified0.3
rmApplied associate-/l*0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019156
(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))))