Average Error: 30.1 → 0.6
Time: 46.2s
Precision: 64
\[\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}\]
\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;
}

Error

Bits error versus x

Target

Original30.1
Target0
Herbie0.6
\[\tan \left(\frac{x}{2}\right)\]

Derivation

  1. Split input into 3 regimes
  2. if x < -0.022581149079332608

    1. Initial program 0.9

      \[\frac{1 - \cos x}{\sin x}\]
    2. Using strategy rm
    3. Applied add-log-exp1.1

      \[\leadsto \color{blue}{\log \left(e^{\frac{1 - \cos x}{\sin x}}\right)}\]

    if -0.022581149079332608 < x < 0.023709696647847237

    1. Initial program 60.0

      \[\frac{1 - \cos x}{\sin x}\]
    2. Taylor expanded around 0 0.0

      \[\leadsto \color{blue}{\frac{1}{2} \cdot x + \left(\frac{1}{24} \cdot {x}^{3} + \frac{1}{240} \cdot {x}^{5}\right)}\]
    3. Simplified0.0

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1}{240}, {x}^{5}, x \cdot \mathsf{fma}\left(x \cdot \frac{1}{24}, x, \frac{1}{2}\right)\right)}\]
    4. Using strategy rm
    5. Applied fma-udef0.0

      \[\leadsto \mathsf{fma}\left(\frac{1}{240}, {x}^{5}, x \cdot \color{blue}{\left(\left(x \cdot \frac{1}{24}\right) \cdot x + \frac{1}{2}\right)}\right)\]
    6. Applied distribute-rgt-in0.0

      \[\leadsto \mathsf{fma}\left(\frac{1}{240}, {x}^{5}, \color{blue}{\left(\left(x \cdot \frac{1}{24}\right) \cdot x\right) \cdot x + \frac{1}{2} \cdot x}\right)\]

    if 0.023709696647847237 < x

    1. Initial program 0.9

      \[\frac{1 - \cos x}{\sin x}\]
    2. Using strategy rm
    3. Applied add-cbrt-cube1.2

      \[\leadsto \frac{\color{blue}{\sqrt[3]{\left(\left(1 - \cos x\right) \cdot \left(1 - \cos x\right)\right) \cdot \left(1 - \cos x\right)}}}{\sin x}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.6

    \[\leadsto \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}\]

Reproduce

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)))