\frac{1 - \cos x}{\sin x}\begin{array}{l}
\mathbf{if}\;\frac{1 - \cos x}{\sin x} \le -0.0107629324502667868:\\
\;\;\;\;1 \cdot \frac{1}{\sin x \cdot \left({\left(\cos x\right)}^{2} + \left(1 \cdot \cos x + 1\right)\right)} - \frac{{\left(\cos x\right)}^{3}}{\sin x \cdot \left({\left(\cos x\right)}^{2} + \left(1 \cdot \cos x + 1\right)\right)}\\
\mathbf{elif}\;\frac{1 - \cos x}{\sin x} \le 4.3298603204685633 \cdot 10^{-4}:\\
\;\;\;\;\mathsf{fma}\left(0.04166666666666663, {x}^{3}, \mathsf{fma}\left(0.004166666666666624, {x}^{5}, 0.5 \cdot x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{{1}^{3}}{1}, \frac{\frac{1}{\mathsf{fma}\left(\cos x, 1 + \cos x, 1 \cdot 1\right)}}{\sin x}, -\frac{1}{\sin x} \cdot \frac{{\left(\cos x\right)}^{3}}{\mathsf{fma}\left(\cos x, 1 + \cos x, 1 \cdot 1\right)}\right) + \mathsf{fma}\left(-\frac{1}{\sin x}, \frac{{\left(\cos x\right)}^{3}}{\mathsf{fma}\left(\cos x, 1 + \cos x, 1 \cdot 1\right)}, \frac{1}{\sin x} \cdot \frac{{\left(\cos x\right)}^{3}}{\mathsf{fma}\left(\cos x, 1 + \cos x, 1 \cdot 1\right)}\right)\\
\end{array}double code(double x) {
return ((1.0 - cos(x)) / sin(x));
}
double code(double x) {
double temp;
if ((((1.0 - cos(x)) / sin(x)) <= -0.010762932450266787)) {
temp = ((1.0 * (1.0 / (sin(x) * (pow(cos(x), 2.0) + ((1.0 * cos(x)) + 1.0))))) - (pow(cos(x), 3.0) / (sin(x) * (pow(cos(x), 2.0) + ((1.0 * cos(x)) + 1.0)))));
} else {
double temp_1;
if ((((1.0 - cos(x)) / sin(x)) <= 0.00043298603204685633)) {
temp_1 = fma(0.04166666666666663, pow(x, 3.0), fma(0.004166666666666624, pow(x, 5.0), (0.5 * x)));
} else {
temp_1 = (fma((pow(1.0, 3.0) / 1.0), ((1.0 / fma(cos(x), (1.0 + cos(x)), (1.0 * 1.0))) / sin(x)), -((1.0 / sin(x)) * (pow(cos(x), 3.0) / fma(cos(x), (1.0 + cos(x)), (1.0 * 1.0))))) + fma(-(1.0 / sin(x)), (pow(cos(x), 3.0) / fma(cos(x), (1.0 + cos(x)), (1.0 * 1.0))), ((1.0 / sin(x)) * (pow(cos(x), 3.0) / fma(cos(x), (1.0 + cos(x)), (1.0 * 1.0))))));
}
temp = temp_1;
}
return temp;
}




Bits error versus x
Results
| Original | 30.1 |
|---|---|
| Target | 0.0 |
| Herbie | 0.7 |
if (/ (- 1.0 (cos x)) (sin x)) < -0.010762932450266787Initial program 0.9
rmApplied add-log-exp1.0
rmApplied flip3--1.1
Simplified1.1
rmApplied div-sub1.1
Applied div-sub1.2
Applied exp-diff1.3
Applied log-div1.1
Simplified1.1
Simplified1.0
Taylor expanded around -inf 1.0
if -0.010762932450266787 < (/ (- 1.0 (cos x)) (sin x)) < 0.00043298603204685633Initial program 59.8
rmApplied add-log-exp59.8
rmApplied flip3--59.8
Simplified59.8
Taylor expanded around 0 0.3
Simplified0.3
if 0.00043298603204685633 < (/ (- 1.0 (cos x)) (sin x)) Initial program 1.0
rmApplied add-log-exp1.0
rmApplied flip3--1.2
Simplified1.2
rmApplied div-sub1.2
Applied div-sub1.2
Applied exp-diff1.2
Applied log-div1.2
Simplified1.2
Simplified1.1
rmApplied div-inv1.2
Applied *-un-lft-identity1.2
Applied div-inv1.2
Applied times-frac1.2
Applied prod-diff1.2
Final simplification0.7
herbie shell --seed 2020056 +o rules:numerics
(FPCore (x)
:name "tanhf (example 3.4)"
:precision binary64
:herbie-expected 2
:herbie-target
(tan (/ x 2))
(/ (- 1 (cos x)) (sin x)))