Average Error: 30.4 → 0.2
Time: 1.1m
Precision: 64
Internal Precision: 2432
\[\frac{1 - \cos x}{\sin x}\]
↓
\[\begin{array}{l}
\mathbf{if}\;\frac{\sin x}{1 - \cos x} \le -1.0388904609212473:\\
\;\;\;\;(e^{\log_* (1 + \frac{\sin x}{1 + \cos x})} - 1)^*\\
\mathbf{if}\;\frac{\sin x}{1 - \cos x} \le 2.1509551556367295:\\
\;\;\;\;\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{(\left(\sin x\right) \cdot \left((\left(\cos x\right) \cdot \left(\cos x\right) + \left(\cos x\right))_*\right) + \left(\sin x\right))_*}\\
\mathbf{else}:\\
\;\;\;\;(e^{\log_* (1 + \frac{\sin x}{1 + \cos x})} - 1)^*\\
\end{array}\]
Target
| Original | 30.4 |
|---|
| Target | 0 |
|---|
| Herbie | 0.2 |
|---|
\[\tan \left(\frac{x}{2}\right)\]
Derivation
- Split input into 2 regimes
if (/ (sin x) (- 1 (cos x))) < -1.0388904609212473 or 2.1509551556367295 < (/ (sin x) (- 1 (cos x)))
Initial program 43.6
\[\frac{1 - \cos x}{\sin x}\]
- Using strategy
rm Applied flip--43.7
\[\leadsto \frac{\color{blue}{\frac{1 \cdot 1 - \cos x \cdot \cos x}{1 + \cos x}}}{\sin x}\]
Applied simplify20.8
\[\leadsto \frac{\frac{\color{blue}{\sin x \cdot \sin x}}{1 + \cos x}}{\sin x}\]
- Using strategy
rm Applied expm1-log1p-u20.9
\[\leadsto \color{blue}{(e^{\log_* (1 + \frac{\frac{\sin x \cdot \sin x}{1 + \cos x}}{\sin x})} - 1)^*}\]
Applied simplify0.1
\[\leadsto (e^{\color{blue}{\log_* (1 + \frac{\sin x}{1 + \cos x})}} - 1)^*\]
if -1.0388904609212473 < (/ (sin x) (- 1 (cos x))) < 2.1509551556367295
Initial program 0.4
\[\frac{1 - \cos x}{\sin x}\]
- Using strategy
rm Applied flip3--0.5
\[\leadsto \frac{\color{blue}{\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{1 \cdot 1 + \left(\cos x \cdot \cos x + 1 \cdot \cos x\right)}}}{\sin x}\]
Applied associate-/l/0.5
\[\leadsto \color{blue}{\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{\sin x \cdot \left(1 \cdot 1 + \left(\cos x \cdot \cos x + 1 \cdot \cos x\right)\right)}}\]
Applied simplify0.4
\[\leadsto \frac{{1}^{3} - {\left(\cos x\right)}^{3}}{\color{blue}{(\left(\sin x\right) \cdot \left((\left(\cos x\right) \cdot \left(\cos x\right) + \left(\cos x\right))_*\right) + \left(\sin x\right))_*}}\]
- Recombined 2 regimes into one program.
Runtime
herbie shell --seed '#(1064300848 3212030778 2049303162 3567222883 2277747821 1384278011)' +o rules:numerics
(FPCore (x)
:name "tanhf (example 3.4)"
:herbie-expected 2
:herbie-target
(tan (/ x 2))
(/ (- 1 (cos x)) (sin x)))