\frac{1 - \cos x}{\sin x}\begin{array}{l}
\mathbf{if}\;x \le -0.02258114907933260820382947997586597921327:\\
\;\;\;\;\log \left(e^{\frac{1 - \cos x}{\sin x}}\right)\\
\mathbf{elif}\;x \le 0.02370969664784723651695941271100309677422:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{240}, {x}^{5}, x \cdot \left(x \cdot \left(\frac{1}{24} \cdot x\right)\right) + x \cdot \frac{1}{2}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(\left(1 - \cos x\right) \cdot \left(1 - \cos x\right)\right) \cdot \left(1 - \cos x\right)}}{\sin x}\\
\end{array}double f(double x) {
double r3244646 = 1.0;
double r3244647 = x;
double r3244648 = cos(r3244647);
double r3244649 = r3244646 - r3244648;
double r3244650 = sin(r3244647);
double r3244651 = r3244649 / r3244650;
return r3244651;
}
double f(double x) {
double r3244652 = x;
double r3244653 = -0.022581149079332608;
bool r3244654 = r3244652 <= r3244653;
double r3244655 = 1.0;
double r3244656 = cos(r3244652);
double r3244657 = r3244655 - r3244656;
double r3244658 = sin(r3244652);
double r3244659 = r3244657 / r3244658;
double r3244660 = exp(r3244659);
double r3244661 = log(r3244660);
double r3244662 = 0.023709696647847237;
bool r3244663 = r3244652 <= r3244662;
double r3244664 = 0.004166666666666667;
double r3244665 = 5.0;
double r3244666 = pow(r3244652, r3244665);
double r3244667 = 0.041666666666666664;
double r3244668 = r3244667 * r3244652;
double r3244669 = r3244652 * r3244668;
double r3244670 = r3244652 * r3244669;
double r3244671 = 0.5;
double r3244672 = r3244652 * r3244671;
double r3244673 = r3244670 + r3244672;
double r3244674 = fma(r3244664, r3244666, r3244673);
double r3244675 = r3244657 * r3244657;
double r3244676 = r3244675 * r3244657;
double r3244677 = cbrt(r3244676);
double r3244678 = r3244677 / r3244658;
double r3244679 = r3244663 ? r3244674 : r3244678;
double r3244680 = r3244654 ? r3244661 : r3244679;
return r3244680;
}




Bits error versus x
| Original | 30.1 |
|---|---|
| Target | 0 |
| Herbie | 0.6 |
if x < -0.022581149079332608Initial program 0.9
rmApplied add-log-exp1.1
if -0.022581149079332608 < x < 0.023709696647847237Initial program 60.0
Taylor expanded around 0 0.0
Simplified0.0
rmApplied fma-udef0.0
Applied distribute-rgt-in0.0
if 0.023709696647847237 < x Initial program 0.9
rmApplied add-cbrt-cube1.2
Final simplification0.6
herbie shell --seed 2019168 +o rules:numerics
(FPCore (x)
:name "tanhf (example 3.4)"
:herbie-expected 2
:herbie-target
(tan (/ x 2.0))
(/ (- 1.0 (cos x)) (sin x)))