Average Error: 0.0 → 0.0
Time: 8.1s
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{log1p}\left(\mathsf{expm1}\left(\frac{1}{2 + \mathsf{fma}\left(\sqrt{2}, \sqrt{2}, -\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\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{log1p}\left(\mathsf{expm1}\left(\frac{1}{2 + \mathsf{fma}\left(\sqrt{2}, \sqrt{2}, -\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}\right)\right)
double f(double t) {
        double r53456 = 1.0;
        double r53457 = 2.0;
        double r53458 = t;
        double r53459 = r53457 / r53458;
        double r53460 = r53456 / r53458;
        double r53461 = r53456 + r53460;
        double r53462 = r53459 / r53461;
        double r53463 = r53457 - r53462;
        double r53464 = r53463 * r53463;
        double r53465 = r53457 + r53464;
        double r53466 = r53456 / r53465;
        double r53467 = r53456 - r53466;
        return r53467;
}

double f(double t) {
        double r53468 = 1.0;
        double r53469 = 2.0;
        double r53470 = sqrt(r53469);
        double r53471 = t;
        double r53472 = r53469 / r53471;
        double r53473 = r53468 / r53471;
        double r53474 = r53468 + r53473;
        double r53475 = r53472 / r53474;
        double r53476 = -r53475;
        double r53477 = fma(r53470, r53470, r53476);
        double r53478 = r53469 - r53475;
        double r53479 = r53477 * r53478;
        double r53480 = r53469 + r53479;
        double r53481 = r53468 / r53480;
        double r53482 = expm1(r53481);
        double r53483 = log1p(r53482);
        double r53484 = r53468 - r53483;
        return r53484;
}

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 log1p-expm1-u0.0

    \[\leadsto 1 - \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\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. Using strategy rm
  5. Applied add-sqr-sqrt0.0

    \[\leadsto 1 - \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{2 + \left(\color{blue}{\sqrt{2} \cdot \sqrt{2}} - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}\right)\right)\]
  6. Applied fma-neg0.0

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

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

Reproduce

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