Average Error: 0.0 → 0.0
Time: 17.6s
Precision: 64
\[1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}\]
\[1 - \mathsf{expm1}\left(\mathsf{log1p}\left(\frac{1}{\mathsf{fma}\left(2 - \frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}, 2 - \frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}, 2\right)}\right)\right)\]
1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}
1 - \mathsf{expm1}\left(\mathsf{log1p}\left(\frac{1}{\mathsf{fma}\left(2 - \frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}, 2 - \frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}, 2\right)}\right)\right)
double f(double t) {
        double r32793 = 1.0;
        double r32794 = 2.0;
        double r32795 = t;
        double r32796 = r32794 / r32795;
        double r32797 = r32793 / r32795;
        double r32798 = r32793 + r32797;
        double r32799 = r32796 / r32798;
        double r32800 = r32794 - r32799;
        double r32801 = r32800 * r32800;
        double r32802 = r32794 + r32801;
        double r32803 = r32793 / r32802;
        double r32804 = r32793 - r32803;
        return r32804;
}

double f(double t) {
        double r32805 = 1.0;
        double r32806 = 2.0;
        double r32807 = t;
        double r32808 = r32805 / r32807;
        double r32809 = r32805 + r32808;
        double r32810 = r32809 * r32807;
        double r32811 = r32806 / r32810;
        double r32812 = r32806 - r32811;
        double r32813 = fma(r32812, r32812, r32806);
        double r32814 = r32805 / r32813;
        double r32815 = log1p(r32814);
        double r32816 = expm1(r32815);
        double r32817 = r32805 - r32816;
        return r32817;
}

Error

Bits error versus t

Derivation

  1. Initial program 0.0

    \[1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}\]
  2. Using strategy rm
  3. Applied expm1-log1p-u0.0

    \[\leadsto 1 - \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}\right)\right)}\]
  4. Simplified0.0

    \[\leadsto 1 - \mathsf{expm1}\left(\color{blue}{\mathsf{log1p}\left(\frac{1}{\mathsf{fma}\left(2 - \frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}, 2 - \frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}, 2\right)}\right)}\right)\]
  5. Final simplification0.0

    \[\leadsto 1 - \mathsf{expm1}\left(\mathsf{log1p}\left(\frac{1}{\mathsf{fma}\left(2 - \frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}, 2 - \frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}, 2\right)}\right)\right)\]

Reproduce

herbie shell --seed 2019326 +o rules:numerics
(FPCore (t)
  :name "Kahan p13 Example 3"
  :precision binary64
  (- 1 (/ 1 (+ 2 (* (- 2 (/ (/ 2 t) (+ 1 (/ 1 t)))) (- 2 (/ (/ 2 t) (+ 1 (/ 1 t)))))))))