Average Error: 30.8 → 0.0
Time: 32.7s
Precision: 64
\[\frac{x - \sin x}{x - \tan x}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.027836888459983777:\\ \;\;\;\;\frac{x - \sin x}{x - \tan x}\\ \mathbf{elif}\;x \le 0.02825639784178301:\\ \;\;\;\;\mathsf{fma}\left(x \cdot x, \frac{9}{40}, \frac{-1}{2}\right) - \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \frac{27}{2800}\\ \mathbf{else}:\\ \;\;\;\;\frac{x - \sin x}{x - \tan x}\\ \end{array}\]
\frac{x - \sin x}{x - \tan x}
\begin{array}{l}
\mathbf{if}\;x \le -0.027836888459983777:\\
\;\;\;\;\frac{x - \sin x}{x - \tan x}\\

\mathbf{elif}\;x \le 0.02825639784178301:\\
\;\;\;\;\mathsf{fma}\left(x \cdot x, \frac{9}{40}, \frac{-1}{2}\right) - \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \frac{27}{2800}\\

\mathbf{else}:\\
\;\;\;\;\frac{x - \sin x}{x - \tan x}\\

\end{array}
double f(double x) {
        double r809459 = x;
        double r809460 = sin(r809459);
        double r809461 = r809459 - r809460;
        double r809462 = tan(r809459);
        double r809463 = r809459 - r809462;
        double r809464 = r809461 / r809463;
        return r809464;
}

double f(double x) {
        double r809465 = x;
        double r809466 = -0.027836888459983777;
        bool r809467 = r809465 <= r809466;
        double r809468 = sin(r809465);
        double r809469 = r809465 - r809468;
        double r809470 = tan(r809465);
        double r809471 = r809465 - r809470;
        double r809472 = r809469 / r809471;
        double r809473 = 0.02825639784178301;
        bool r809474 = r809465 <= r809473;
        double r809475 = r809465 * r809465;
        double r809476 = 0.225;
        double r809477 = -0.5;
        double r809478 = fma(r809475, r809476, r809477);
        double r809479 = r809475 * r809475;
        double r809480 = 0.009642857142857142;
        double r809481 = r809479 * r809480;
        double r809482 = r809478 - r809481;
        double r809483 = r809474 ? r809482 : r809472;
        double r809484 = r809467 ? r809472 : r809483;
        return r809484;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -0.027836888459983777 or 0.02825639784178301 < x

    1. Initial program 0.1

      \[\frac{x - \sin x}{x - \tan x}\]

    if -0.027836888459983777 < x < 0.02825639784178301

    1. Initial program 62.8

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

      \[\leadsto \color{blue}{\frac{9}{40} \cdot {x}^{2} - \left(\frac{27}{2800} \cdot {x}^{4} + \frac{1}{2}\right)}\]
    3. Simplified0.0

      \[\leadsto \color{blue}{\mathsf{fma}\left(x \cdot x, \frac{9}{40}, \frac{-1}{2}\right) - \frac{27}{2800} \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.027836888459983777:\\ \;\;\;\;\frac{x - \sin x}{x - \tan x}\\ \mathbf{elif}\;x \le 0.02825639784178301:\\ \;\;\;\;\mathsf{fma}\left(x \cdot x, \frac{9}{40}, \frac{-1}{2}\right) - \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \frac{27}{2800}\\ \mathbf{else}:\\ \;\;\;\;\frac{x - \sin x}{x - \tan x}\\ \end{array}\]

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (x)
  :name "sintan (problem 3.4.5)"
  (/ (- x (sin x)) (- x (tan x))))