\frac{1}{x} - \frac{1}{\tan x}\frac{x}{\sqrt{\left(\frac{1}{9} - \left(x \cdot \left(x \cdot \frac{1}{45}\right)\right) \cdot \frac{1}{3}\right) + \left(x \cdot \left(x \cdot \frac{1}{45}\right)\right) \cdot \left(x \cdot \left(x \cdot \frac{1}{45}\right)\right)}} \cdot \frac{\left(\left(x \cdot x\right) \cdot \left(\frac{1}{91125} \cdot \left(x \cdot x\right)\right)\right) \cdot \left(x \cdot x\right) + \frac{1}{27}}{\sqrt{\left(\frac{1}{9} - \left(x \cdot \left(x \cdot \frac{1}{45}\right)\right) \cdot \frac{1}{3}\right) + \left(x \cdot \left(x \cdot \frac{1}{45}\right)\right) \cdot \left(x \cdot \left(x \cdot \frac{1}{45}\right)\right)}} + {x}^{5} \cdot \frac{2}{945}double f(double x) {
double r2243243 = 1.0;
double r2243244 = x;
double r2243245 = r2243243 / r2243244;
double r2243246 = tan(r2243244);
double r2243247 = r2243243 / r2243246;
double r2243248 = r2243245 - r2243247;
return r2243248;
}
double f(double x) {
double r2243249 = x;
double r2243250 = 0.1111111111111111;
double r2243251 = 0.022222222222222223;
double r2243252 = r2243249 * r2243251;
double r2243253 = r2243249 * r2243252;
double r2243254 = 0.3333333333333333;
double r2243255 = r2243253 * r2243254;
double r2243256 = r2243250 - r2243255;
double r2243257 = r2243253 * r2243253;
double r2243258 = r2243256 + r2243257;
double r2243259 = sqrt(r2243258);
double r2243260 = r2243249 / r2243259;
double r2243261 = r2243249 * r2243249;
double r2243262 = 1.0973936899862826e-05;
double r2243263 = r2243262 * r2243261;
double r2243264 = r2243261 * r2243263;
double r2243265 = r2243264 * r2243261;
double r2243266 = 0.037037037037037035;
double r2243267 = r2243265 + r2243266;
double r2243268 = r2243267 / r2243259;
double r2243269 = r2243260 * r2243268;
double r2243270 = 5.0;
double r2243271 = pow(r2243249, r2243270);
double r2243272 = 0.0021164021164021165;
double r2243273 = r2243271 * r2243272;
double r2243274 = r2243269 + r2243273;
return r2243274;
}




Bits error versus x
Results
| Original | 59.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.2 |
Initial program 59.9
Taylor expanded around 0 0.3
Simplified0.3
rmApplied flip3-+1.2
Applied associate-*l/1.1
Simplified0.3
rmApplied add-sqr-sqrt0.3
Applied times-frac0.2
Final simplification0.2
herbie shell --seed 2019135
(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))))