\frac{1}{x} - \frac{1}{\tan x}\mathsf{fma}\left(\frac{2}{945}, {x}^{5}, \sqrt{\sqrt{\mathsf{fma}\left(x \cdot x, \frac{1}{45}, \frac{1}{3}\right)}} \cdot \left(\sqrt{\sqrt{\sqrt{\mathsf{fma}\left(x \cdot x, \frac{1}{45}, \frac{1}{3}\right)}}} \cdot \left(\sqrt{\sqrt{\sqrt{\mathsf{fma}\left(x \cdot x, \frac{1}{45}, \frac{1}{3}\right)}}} \cdot \left(\sqrt{\mathsf{fma}\left(x \cdot x, \frac{1}{45}, \frac{1}{3}\right)} \cdot x\right)\right)\right)\right)double f(double x) {
double r2684592 = 1.0;
double r2684593 = x;
double r2684594 = r2684592 / r2684593;
double r2684595 = tan(r2684593);
double r2684596 = r2684592 / r2684595;
double r2684597 = r2684594 - r2684596;
return r2684597;
}
double f(double x) {
double r2684598 = 0.0021164021164021165;
double r2684599 = x;
double r2684600 = 5.0;
double r2684601 = pow(r2684599, r2684600);
double r2684602 = r2684599 * r2684599;
double r2684603 = 0.022222222222222223;
double r2684604 = 0.3333333333333333;
double r2684605 = fma(r2684602, r2684603, r2684604);
double r2684606 = sqrt(r2684605);
double r2684607 = sqrt(r2684606);
double r2684608 = sqrt(r2684607);
double r2684609 = r2684606 * r2684599;
double r2684610 = r2684608 * r2684609;
double r2684611 = r2684608 * r2684610;
double r2684612 = r2684607 * r2684611;
double r2684613 = fma(r2684598, r2684601, r2684612);
return r2684613;
}




Bits error versus x
| Original | 60.0 |
|---|---|
| Target | 0.1 |
| Herbie | 0.4 |
Initial program 60.0
Taylor expanded around 0 0.3
Simplified0.3
rmApplied add-sqr-sqrt0.3
Applied associate-*r*0.7
rmApplied add-sqr-sqrt0.7
Applied sqrt-prod0.7
Applied associate-*r*0.5
rmApplied add-sqr-sqrt0.5
Applied sqrt-prod0.5
Applied sqrt-prod0.5
Applied associate-*r*0.4
Final simplification0.4
herbie shell --seed 2019163 +o rules:numerics
(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))))