Average Error: 0.0 → 0.0
Time: 1.4m
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 - \frac{1}{(\left(2 - \frac{2}{1 + t}\right) \cdot \left(2 - \frac{2}{1 + t}\right) + 2)_*}\]
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 - \frac{1}{(\left(2 - \frac{2}{1 + t}\right) \cdot \left(2 - \frac{2}{1 + t}\right) + 2)_*}
double f(double t) {
        double r4661569 = 1.0;
        double r4661570 = 2.0;
        double r4661571 = t;
        double r4661572 = r4661570 / r4661571;
        double r4661573 = r4661569 / r4661571;
        double r4661574 = r4661569 + r4661573;
        double r4661575 = r4661572 / r4661574;
        double r4661576 = r4661570 - r4661575;
        double r4661577 = r4661576 * r4661576;
        double r4661578 = r4661570 + r4661577;
        double r4661579 = r4661569 / r4661578;
        double r4661580 = r4661569 - r4661579;
        return r4661580;
}

double f(double t) {
        double r4661581 = 1.0;
        double r4661582 = 2.0;
        double r4661583 = t;
        double r4661584 = r4661581 + r4661583;
        double r4661585 = r4661582 / r4661584;
        double r4661586 = r4661582 - r4661585;
        double r4661587 = fma(r4661586, r4661586, r4661582);
        double r4661588 = r4661581 / r4661587;
        double r4661589 = r4661581 - r4661588;
        return r4661589;
}

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. Simplified0.0

    \[\leadsto \color{blue}{1 - \frac{1}{(\left(2 - \frac{2}{1 + t}\right) \cdot \left(2 - \frac{2}{1 + t}\right) + 2)_*}}\]
  3. Final simplification0.0

    \[\leadsto 1 - \frac{1}{(\left(2 - \frac{2}{1 + t}\right) \cdot \left(2 - \frac{2}{1 + t}\right) + 2)_*}\]

Reproduce

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