\frac{1 - \cos x}{\sin x}\begin{array}{l}
\mathbf{if}\;\frac{1 - \cos x}{\sin x} \le -0.0311367922052378544:\\
\;\;\;\;\sqrt[3]{{\left(\frac{1 - \cos x}{\sin x}\right)}^{3}}\\
\mathbf{elif}\;\frac{1 - \cos x}{\sin x} \le 0.0038090217065521576:\\
\;\;\;\;\frac{1}{24} \cdot {x}^{3} + \left(\frac{1}{240} \cdot {x}^{5} + \frac{1}{2} \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{1 - \cos x}{\sin x}} \cdot \sqrt{\frac{1 - \cos x}{\sin x}}\\
\end{array}double f(double x) {
double r47524 = 1.0;
double r47525 = x;
double r47526 = cos(r47525);
double r47527 = r47524 - r47526;
double r47528 = sin(r47525);
double r47529 = r47527 / r47528;
return r47529;
}
double f(double x) {
double r47530 = 1.0;
double r47531 = x;
double r47532 = cos(r47531);
double r47533 = r47530 - r47532;
double r47534 = sin(r47531);
double r47535 = r47533 / r47534;
double r47536 = -0.031136792205237854;
bool r47537 = r47535 <= r47536;
double r47538 = 3.0;
double r47539 = pow(r47535, r47538);
double r47540 = cbrt(r47539);
double r47541 = 0.0038090217065521576;
bool r47542 = r47535 <= r47541;
double r47543 = 0.041666666666666664;
double r47544 = pow(r47531, r47538);
double r47545 = r47543 * r47544;
double r47546 = 0.004166666666666667;
double r47547 = 5.0;
double r47548 = pow(r47531, r47547);
double r47549 = r47546 * r47548;
double r47550 = 0.5;
double r47551 = r47550 * r47531;
double r47552 = r47549 + r47551;
double r47553 = r47545 + r47552;
double r47554 = sqrt(r47535);
double r47555 = r47554 * r47554;
double r47556 = r47542 ? r47553 : r47555;
double r47557 = r47537 ? r47540 : r47556;
return r47557;
}




Bits error versus x
Results
| Original | 30.2 |
|---|---|
| Target | 0.0 |
| Herbie | 0.9 |
if (/ (- 1.0 (cos x)) (sin x)) < -0.031136792205237854Initial program 0.8
rmApplied add-log-exp0.8
rmApplied div-inv0.9
rmApplied add-cbrt-cube1.1
Simplified1.0
if -0.031136792205237854 < (/ (- 1.0 (cos x)) (sin x)) < 0.0038090217065521576Initial program 59.3
Taylor expanded around 0 0.7
if 0.0038090217065521576 < (/ (- 1.0 (cos x)) (sin x)) Initial program 0.8
rmApplied add-sqr-sqrt1.0
Final simplification0.9
herbie shell --seed 2020089
(FPCore (x)
:name "tanhf (example 3.4)"
:precision binary64
:herbie-expected 2
:herbie-target
(tan (/ x 2))
(/ (- 1 (cos x)) (sin x)))