Average Error: 0.0 → 0.0
Time: 9.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 - 1 \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{\mathsf{fma}\left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}, 2 - \frac{\frac{2}{t}}{1 + \frac{1}{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 - 1 \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{\mathsf{fma}\left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}, 2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}, 2\right)}\right)\right)
double f(double t) {
        double r61259 = 1.0;
        double r61260 = 2.0;
        double r61261 = t;
        double r61262 = r61260 / r61261;
        double r61263 = r61259 / r61261;
        double r61264 = r61259 + r61263;
        double r61265 = r61262 / r61264;
        double r61266 = r61260 - r61265;
        double r61267 = r61266 * r61266;
        double r61268 = r61260 + r61267;
        double r61269 = r61259 / r61268;
        double r61270 = r61259 - r61269;
        return r61270;
}

double f(double t) {
        double r61271 = 1.0;
        double r61272 = 1.0;
        double r61273 = 2.0;
        double r61274 = t;
        double r61275 = r61273 / r61274;
        double r61276 = r61271 / r61274;
        double r61277 = r61271 + r61276;
        double r61278 = r61275 / r61277;
        double r61279 = r61273 - r61278;
        double r61280 = fma(r61279, r61279, r61273);
        double r61281 = r61271 / r61280;
        double r61282 = expm1(r61281);
        double r61283 = log1p(r61282);
        double r61284 = r61272 * r61283;
        double r61285 = r61271 - r61284;
        return r61285;
}

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 *-un-lft-identity0.0

    \[\leadsto 1 - \frac{1}{\color{blue}{1 \cdot \left(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)}}\]
  4. Applied *-un-lft-identity0.0

    \[\leadsto 1 - \frac{\color{blue}{1 \cdot 1}}{1 \cdot \left(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)}\]
  5. Applied times-frac0.0

    \[\leadsto 1 - \color{blue}{\frac{1}{1} \cdot \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)}}\]
  6. Simplified0.0

    \[\leadsto 1 - \color{blue}{1} \cdot \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)}\]
  7. Simplified0.0

    \[\leadsto 1 - 1 \cdot \color{blue}{\frac{1}{\mathsf{fma}\left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}, 2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}, 2\right)}}\]
  8. Using strategy rm
  9. Applied log1p-expm1-u0.0

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

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

Reproduce

herbie shell --seed 2019354 +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)))))))))