Average Error: 30.9 → 0.6
Time: 13.8s
Precision: 64
\[\frac{1 - \cos x}{\sin x}\]
\[\begin{array}{l} \mathbf{if}\;\frac{1 - \cos x}{\sin x} \le -0.006506020429254646096628444951193159795366:\\ \;\;\;\;\frac{\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(1, 1, \cos x \cdot \frac{1 \cdot 1 - {\left(\cos x\right)}^{2}}{1 - \cos x}\right)}}{\sin x}\\ \mathbf{elif}\;\frac{1 - \cos x}{\sin x} \le 9.100983630978486083832473818588937319873 \cdot 10^{-5}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{24}, {x}^{3}, \mathsf{fma}\left(\frac{1}{240}, {x}^{5}, \frac{1}{2} \cdot x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{{\left({1}^{3}\right)}^{3} - {\left({\left(\cos x\right)}^{3}\right)}^{3}}{\mathsf{fma}\left({\left(\cos x\right)}^{3}, {1}^{3} + {\left(\cos x\right)}^{3}, {1}^{6}\right)}}{\mathsf{fma}\left(1, 1, \cos x \cdot \left(1 + \cos x\right)\right)}}{\sin x}\\ \end{array}\]
\frac{1 - \cos x}{\sin x}
\begin{array}{l}
\mathbf{if}\;\frac{1 - \cos x}{\sin x} \le -0.006506020429254646096628444951193159795366:\\
\;\;\;\;\frac{\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(1, 1, \cos x \cdot \frac{1 \cdot 1 - {\left(\cos x\right)}^{2}}{1 - \cos x}\right)}}{\sin x}\\

\mathbf{elif}\;\frac{1 - \cos x}{\sin x} \le 9.100983630978486083832473818588937319873 \cdot 10^{-5}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{24}, {x}^{3}, \mathsf{fma}\left(\frac{1}{240}, {x}^{5}, \frac{1}{2} \cdot x\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{{\left({1}^{3}\right)}^{3} - {\left({\left(\cos x\right)}^{3}\right)}^{3}}{\mathsf{fma}\left({\left(\cos x\right)}^{3}, {1}^{3} + {\left(\cos x\right)}^{3}, {1}^{6}\right)}}{\mathsf{fma}\left(1, 1, \cos x \cdot \left(1 + \cos x\right)\right)}}{\sin x}\\

\end{array}
double f(double x) {
        double r49877 = 1.0;
        double r49878 = x;
        double r49879 = cos(r49878);
        double r49880 = r49877 - r49879;
        double r49881 = sin(r49878);
        double r49882 = r49880 / r49881;
        return r49882;
}

double f(double x) {
        double r49883 = 1.0;
        double r49884 = x;
        double r49885 = cos(r49884);
        double r49886 = r49883 - r49885;
        double r49887 = sin(r49884);
        double r49888 = r49886 / r49887;
        double r49889 = -0.006506020429254646;
        bool r49890 = r49888 <= r49889;
        double r49891 = 3.0;
        double r49892 = pow(r49883, r49891);
        double r49893 = pow(r49885, r49891);
        double r49894 = r49892 - r49893;
        double r49895 = r49883 * r49883;
        double r49896 = 2.0;
        double r49897 = pow(r49885, r49896);
        double r49898 = r49895 - r49897;
        double r49899 = r49898 / r49886;
        double r49900 = r49885 * r49899;
        double r49901 = fma(r49883, r49883, r49900);
        double r49902 = r49894 / r49901;
        double r49903 = r49902 / r49887;
        double r49904 = 9.100983630978486e-05;
        bool r49905 = r49888 <= r49904;
        double r49906 = 0.041666666666666664;
        double r49907 = pow(r49884, r49891);
        double r49908 = 0.004166666666666667;
        double r49909 = 5.0;
        double r49910 = pow(r49884, r49909);
        double r49911 = 0.5;
        double r49912 = r49911 * r49884;
        double r49913 = fma(r49908, r49910, r49912);
        double r49914 = fma(r49906, r49907, r49913);
        double r49915 = pow(r49892, r49891);
        double r49916 = pow(r49893, r49891);
        double r49917 = r49915 - r49916;
        double r49918 = r49892 + r49893;
        double r49919 = 6.0;
        double r49920 = pow(r49883, r49919);
        double r49921 = fma(r49893, r49918, r49920);
        double r49922 = r49917 / r49921;
        double r49923 = r49883 + r49885;
        double r49924 = r49885 * r49923;
        double r49925 = fma(r49883, r49883, r49924);
        double r49926 = r49922 / r49925;
        double r49927 = r49926 / r49887;
        double r49928 = r49905 ? r49914 : r49927;
        double r49929 = r49890 ? r49903 : r49928;
        return r49929;
}

Error

Bits error versus x

Target

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

Derivation

  1. Split input into 3 regimes
  2. if (/ (- 1.0 (cos x)) (sin x)) < -0.006506020429254646

    1. Initial program 0.9

      \[\frac{1 - \cos x}{\sin x}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity0.9

      \[\leadsto \frac{1 - \cos x}{\color{blue}{1 \cdot \sin x}}\]
    4. Applied *-un-lft-identity0.9

      \[\leadsto \frac{\color{blue}{1 \cdot \left(1 - \cos x\right)}}{1 \cdot \sin x}\]
    5. Applied times-frac0.9

      \[\leadsto \color{blue}{\frac{1}{1} \cdot \frac{1 - \cos x}{\sin x}}\]
    6. Simplified0.9

      \[\leadsto \color{blue}{1} \cdot \frac{1 - \cos x}{\sin x}\]
    7. Using strategy rm
    8. Applied flip3--1.0

      \[\leadsto 1 \cdot \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}\]
    9. Simplified1.0

      \[\leadsto 1 \cdot \frac{\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{\color{blue}{\mathsf{fma}\left(1, 1, \cos x \cdot \left(1 + \cos x\right)\right)}}}{\sin x}\]
    10. Using strategy rm
    11. Applied flip-+1.0

      \[\leadsto 1 \cdot \frac{\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(1, 1, \cos x \cdot \color{blue}{\frac{1 \cdot 1 - \cos x \cdot \cos x}{1 - \cos x}}\right)}}{\sin x}\]
    12. Simplified1.0

      \[\leadsto 1 \cdot \frac{\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(1, 1, \cos x \cdot \frac{\color{blue}{1 \cdot 1 - {\left(\cos x\right)}^{2}}}{1 - \cos x}\right)}}{\sin x}\]

    if -0.006506020429254646 < (/ (- 1.0 (cos x)) (sin x)) < 9.100983630978486e-05

    1. Initial program 60.0

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

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

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

    if 9.100983630978486e-05 < (/ (- 1.0 (cos x)) (sin x))

    1. Initial program 1.0

      \[\frac{1 - \cos x}{\sin x}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity1.0

      \[\leadsto \frac{1 - \cos x}{\color{blue}{1 \cdot \sin x}}\]
    4. Applied *-un-lft-identity1.0

      \[\leadsto \frac{\color{blue}{1 \cdot \left(1 - \cos x\right)}}{1 \cdot \sin x}\]
    5. Applied times-frac1.0

      \[\leadsto \color{blue}{\frac{1}{1} \cdot \frac{1 - \cos x}{\sin x}}\]
    6. Simplified1.0

      \[\leadsto \color{blue}{1} \cdot \frac{1 - \cos x}{\sin x}\]
    7. Using strategy rm
    8. Applied flip3--1.1

      \[\leadsto 1 \cdot \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}\]
    9. Simplified1.1

      \[\leadsto 1 \cdot \frac{\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{\color{blue}{\mathsf{fma}\left(1, 1, \cos x \cdot \left(1 + \cos x\right)\right)}}}{\sin x}\]
    10. Using strategy rm
    11. Applied flip3--1.2

      \[\leadsto 1 \cdot \frac{\frac{\color{blue}{\frac{{\left({1}^{3}\right)}^{3} - {\left({\left(\cos x\right)}^{3}\right)}^{3}}{{1}^{3} \cdot {1}^{3} + \left({\left(\cos x\right)}^{3} \cdot {\left(\cos x\right)}^{3} + {1}^{3} \cdot {\left(\cos x\right)}^{3}\right)}}}{\mathsf{fma}\left(1, 1, \cos x \cdot \left(1 + \cos x\right)\right)}}{\sin x}\]
    12. Simplified1.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{1 - \cos x}{\sin x} \le -0.006506020429254646096628444951193159795366:\\ \;\;\;\;\frac{\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(1, 1, \cos x \cdot \frac{1 \cdot 1 - {\left(\cos x\right)}^{2}}{1 - \cos x}\right)}}{\sin x}\\ \mathbf{elif}\;\frac{1 - \cos x}{\sin x} \le 9.100983630978486083832473818588937319873 \cdot 10^{-5}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{24}, {x}^{3}, \mathsf{fma}\left(\frac{1}{240}, {x}^{5}, \frac{1}{2} \cdot x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{{\left({1}^{3}\right)}^{3} - {\left({\left(\cos x\right)}^{3}\right)}^{3}}{\mathsf{fma}\left({\left(\cos x\right)}^{3}, {1}^{3} + {\left(\cos x\right)}^{3}, {1}^{6}\right)}}{\mathsf{fma}\left(1, 1, \cos x \cdot \left(1 + \cos x\right)\right)}}{\sin x}\\ \end{array}\]

Reproduce

herbie shell --seed 2019350 +o rules:numerics
(FPCore (x)
  :name "tanhf (example 3.4)"
  :precision binary64
  :herbie-expected 2

  :herbie-target
  (tan (/ x 2))

  (/ (- 1 (cos x)) (sin x)))