Average Error: 59.9 → 0.0
Time: 26.6s
Precision: 64
\[-0.0259999999999999988065102485279567190446 \lt x \land x \lt 0.0259999999999999988065102485279567190446\]
\[\frac{1}{x} - \frac{1}{\tan x}\]
\[\mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, \frac{x}{\frac{\frac{1}{\frac{\mathsf{fma}\left(0.02222222222222222307030925492199457949027, x \cdot x, 0.3333333333333333148296162562473909929395\right)}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}\right)\]
\frac{1}{x} - \frac{1}{\tan x}
\mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, \frac{x}{\frac{\frac{1}{\frac{\mathsf{fma}\left(0.02222222222222222307030925492199457949027, x \cdot x, 0.3333333333333333148296162562473909929395\right)}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}\right)
double f(double x) {
        double r4465685 = 1.0;
        double r4465686 = x;
        double r4465687 = r4465685 / r4465686;
        double r4465688 = tan(r4465686);
        double r4465689 = r4465685 / r4465688;
        double r4465690 = r4465687 - r4465689;
        return r4465690;
}

double f(double x) {
        double r4465691 = 0.0021164021164021165;
        double r4465692 = x;
        double r4465693 = 5.0;
        double r4465694 = pow(r4465692, r4465693);
        double r4465695 = 1.0;
        double r4465696 = 0.022222222222222223;
        double r4465697 = r4465692 * r4465692;
        double r4465698 = 0.3333333333333333;
        double r4465699 = fma(r4465696, r4465697, r4465698);
        double r4465700 = r4465696 * r4465697;
        double r4465701 = r4465698 - r4465700;
        double r4465702 = r4465699 / r4465701;
        double r4465703 = r4465695 / r4465702;
        double r4465704 = r4465703 / r4465701;
        double r4465705 = r4465692 / r4465704;
        double r4465706 = fma(r4465691, r4465694, r4465705);
        return r4465706;
}

Error

Bits error versus x

Target

Original59.9
Target0.1
Herbie0.0
\[\begin{array}{l} \mathbf{if}\;\left|x\right| \lt 0.0259999999999999988065102485279567190446:\\ \;\;\;\;\frac{x}{3} \cdot \left(1 + \frac{x \cdot x}{15}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{x} - \frac{1}{\tan x}\\ \end{array}\]

Derivation

  1. Initial program 59.9

    \[\frac{1}{x} - \frac{1}{\tan x}\]
  2. Taylor expanded around 0 0.3

    \[\leadsto \color{blue}{0.3333333333333333148296162562473909929395 \cdot x + \left(0.02222222222222222307030925492199457949027 \cdot {x}^{3} + 0.002116402116402116544841005563171165704262 \cdot {x}^{5}\right)}\]
  3. Simplified0.3

    \[\leadsto \color{blue}{\mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, x \cdot \left(0.3333333333333333148296162562473909929395 + 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)\right)\right)}\]
  4. Using strategy rm
  5. Applied flip-+0.3

    \[\leadsto \mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, x \cdot \color{blue}{\frac{0.3333333333333333148296162562473909929395 \cdot 0.3333333333333333148296162562473909929395 - \left(0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)\right) \cdot \left(0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)\right)}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}\right)\]
  6. Applied associate-*r/0.3

    \[\leadsto \mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, \color{blue}{\frac{x \cdot \left(0.3333333333333333148296162562473909929395 \cdot 0.3333333333333333148296162562473909929395 - \left(0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)\right) \cdot \left(0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)\right)\right)}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}\right)\]
  7. Using strategy rm
  8. Applied associate-/l*0.0

    \[\leadsto \mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, \color{blue}{\frac{x}{\frac{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}{0.3333333333333333148296162562473909929395 \cdot 0.3333333333333333148296162562473909929395 - \left(0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)\right) \cdot \left(0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)\right)}}}\right)\]
  9. Simplified0.0

    \[\leadsto \mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, \frac{x}{\color{blue}{\frac{\frac{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}{\mathsf{fma}\left(0.02222222222222222307030925492199457949027, x \cdot x, 0.3333333333333333148296162562473909929395\right)}}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}}\right)\]
  10. Using strategy rm
  11. Applied clear-num0.0

    \[\leadsto \mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, \frac{x}{\frac{\color{blue}{\frac{1}{\frac{\mathsf{fma}\left(0.02222222222222222307030925492199457949027, x \cdot x, 0.3333333333333333148296162562473909929395\right)}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}}}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}\right)\]
  12. Final simplification0.0

    \[\leadsto \mathsf{fma}\left(0.002116402116402116544841005563171165704262, {x}^{5}, \frac{x}{\frac{\frac{1}{\frac{\mathsf{fma}\left(0.02222222222222222307030925492199457949027, x \cdot x, 0.3333333333333333148296162562473909929395\right)}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}}{0.3333333333333333148296162562473909929395 - 0.02222222222222222307030925492199457949027 \cdot \left(x \cdot x\right)}}\right)\]

Reproduce

herbie shell --seed 2019171 +o rules:numerics
(FPCore (x)
  :name "invcot (example 3.9)"
  :pre (and (< -0.026 x) (< x 0.026))

  :herbie-target
  (if (< (fabs x) 0.026) (* (/ x 3.0) (+ 1.0 (/ (* x x) 15.0))) (- (/ 1.0 x) (/ 1.0 (tan x))))

  (- (/ 1.0 x) (/ 1.0 (tan x))))