Average Error: 0.0 → 0.0
Time: 12.4s
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}{\mathsf{fma}\left(2 - \frac{2}{\mathsf{fma}\left(1, t, 1\right)}, 2 - \frac{2}{\mathsf{fma}\left(1, t, 1\right)}, 2\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 - \frac{1}{\mathsf{fma}\left(2 - \frac{2}{\mathsf{fma}\left(1, t, 1\right)}, 2 - \frac{2}{\mathsf{fma}\left(1, t, 1\right)}, 2\right)}
double f(double t) {
        double r21022 = 1.0;
        double r21023 = 2.0;
        double r21024 = t;
        double r21025 = r21023 / r21024;
        double r21026 = r21022 / r21024;
        double r21027 = r21022 + r21026;
        double r21028 = r21025 / r21027;
        double r21029 = r21023 - r21028;
        double r21030 = r21029 * r21029;
        double r21031 = r21023 + r21030;
        double r21032 = r21022 / r21031;
        double r21033 = r21022 - r21032;
        return r21033;
}

double f(double t) {
        double r21034 = 1.0;
        double r21035 = 2.0;
        double r21036 = t;
        double r21037 = fma(r21034, r21036, r21034);
        double r21038 = r21035 / r21037;
        double r21039 = r21035 - r21038;
        double r21040 = fma(r21039, r21039, r21035);
        double r21041 = r21034 / r21040;
        double r21042 = r21034 - r21041;
        return r21042;
}

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}{\mathsf{fma}\left(2 - \frac{2}{\mathsf{fma}\left(1, t, 1\right)}, 2 - \frac{2}{\mathsf{fma}\left(1, t, 1\right)}, 2\right)}}\]
  3. Final simplification0.0

    \[\leadsto 1 - \frac{1}{\mathsf{fma}\left(2 - \frac{2}{\mathsf{fma}\left(1, t, 1\right)}, 2 - \frac{2}{\mathsf{fma}\left(1, t, 1\right)}, 2\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)))))))))