\frac{1 - \cos x}{\sin x}\begin{array}{l}
\mathbf{if}\;x \le -0.02150701321781052846593418337306502508:\\
\;\;\;\;\log \left(e^{\frac{1 - \cos x}{\sin x}}\right)\\
\mathbf{elif}\;x \le 0.01958263952305929617159208078192023094743:\\
\;\;\;\;\frac{1}{24} \cdot {x}^{3} + \left(\frac{1}{240} \cdot {x}^{5} + \frac{1}{2} \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{{e}^{\left(\log \left({1}^{3} - {\left(\cos x\right)}^{3}\right)\right)}}{\sin x \cdot {e}^{\left(\log \left(1 \cdot 1 + \sqrt[3]{{\left(\cos x \cdot \left(\cos x + 1\right)\right)}^{3}}\right)\right)}}\\
\end{array}double f(double x) {
double r68614 = 1.0;
double r68615 = x;
double r68616 = cos(r68615);
double r68617 = r68614 - r68616;
double r68618 = sin(r68615);
double r68619 = r68617 / r68618;
return r68619;
}
double f(double x) {
double r68620 = x;
double r68621 = -0.02150701321781053;
bool r68622 = r68620 <= r68621;
double r68623 = 1.0;
double r68624 = cos(r68620);
double r68625 = r68623 - r68624;
double r68626 = sin(r68620);
double r68627 = r68625 / r68626;
double r68628 = exp(r68627);
double r68629 = log(r68628);
double r68630 = 0.019582639523059296;
bool r68631 = r68620 <= r68630;
double r68632 = 0.041666666666666664;
double r68633 = 3.0;
double r68634 = pow(r68620, r68633);
double r68635 = r68632 * r68634;
double r68636 = 0.004166666666666667;
double r68637 = 5.0;
double r68638 = pow(r68620, r68637);
double r68639 = r68636 * r68638;
double r68640 = 0.5;
double r68641 = r68640 * r68620;
double r68642 = r68639 + r68641;
double r68643 = r68635 + r68642;
double r68644 = exp(1.0);
double r68645 = pow(r68623, r68633);
double r68646 = pow(r68624, r68633);
double r68647 = r68645 - r68646;
double r68648 = log(r68647);
double r68649 = pow(r68644, r68648);
double r68650 = r68623 * r68623;
double r68651 = r68624 + r68623;
double r68652 = r68624 * r68651;
double r68653 = pow(r68652, r68633);
double r68654 = cbrt(r68653);
double r68655 = r68650 + r68654;
double r68656 = log(r68655);
double r68657 = pow(r68644, r68656);
double r68658 = r68626 * r68657;
double r68659 = r68649 / r68658;
double r68660 = r68631 ? r68643 : r68659;
double r68661 = r68622 ? r68629 : r68660;
return r68661;
}




Bits error versus x
Results
| Original | 30.3 |
|---|---|
| Target | 0.0 |
| Herbie | 0.5 |
if x < -0.02150701321781053Initial program 0.9
rmApplied add-log-exp1.0
if -0.02150701321781053 < x < 0.019582639523059296Initial program 59.8
Taylor expanded around 0 0.0
if 0.019582639523059296 < x Initial program 0.9
rmApplied add-exp-log0.9
rmApplied pow10.9
Applied log-pow0.9
Applied exp-prod1.0
Simplified1.0
rmApplied flip3--1.1
Applied log-div1.1
Applied pow-sub1.0
Applied associate-/l/1.0
rmApplied add-cbrt-cube1.1
Simplified1.1
Final simplification0.5
herbie shell --seed 2019318
(FPCore (x)
:name "tanhf (example 3.4)"
:precision binary64
:herbie-expected 2
:herbie-target
(tan (/ x 2))
(/ (- 1 (cos x)) (sin x)))