Average Error: 0.0 → 0.0
Time: 2.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 r3507932 = 1.0;
        double r3507933 = 2.0;
        double r3507934 = t;
        double r3507935 = r3507933 / r3507934;
        double r3507936 = r3507932 / r3507934;
        double r3507937 = r3507932 + r3507936;
        double r3507938 = r3507935 / r3507937;
        double r3507939 = r3507933 - r3507938;
        double r3507940 = r3507939 * r3507939;
        double r3507941 = r3507933 + r3507940;
        double r3507942 = r3507932 / r3507941;
        double r3507943 = r3507932 - r3507942;
        return r3507943;
}

double f(double t) {
        double r3507944 = 1.0;
        double r3507945 = 2.0;
        double r3507946 = t;
        double r3507947 = r3507944 + r3507946;
        double r3507948 = r3507945 / r3507947;
        double r3507949 = r3507945 - r3507948;
        double r3507950 = fma(r3507949, r3507949, r3507945);
        double r3507951 = r3507944 / r3507950;
        double r3507952 = r3507944 - r3507951;
        return r3507952;
}

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 2019119 +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)))))))))