Average Error: 0.0 → 0.0
Time: 30.2s
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}{2 + \mathsf{expm1}\left(\mathsf{log1p}\left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)\right) \cdot \mathsf{fma}\left(\sqrt{2}, \sqrt{2}, -\frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}\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}{2 + \mathsf{expm1}\left(\mathsf{log1p}\left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)\right) \cdot \mathsf{fma}\left(\sqrt{2}, \sqrt{2}, -\frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}\right)}
double f(double t) {
        double r50086 = 1.0;
        double r50087 = 2.0;
        double r50088 = t;
        double r50089 = r50087 / r50088;
        double r50090 = r50086 / r50088;
        double r50091 = r50086 + r50090;
        double r50092 = r50089 / r50091;
        double r50093 = r50087 - r50092;
        double r50094 = r50093 * r50093;
        double r50095 = r50087 + r50094;
        double r50096 = r50086 / r50095;
        double r50097 = r50086 - r50096;
        return r50097;
}

double f(double t) {
        double r50098 = 1.0;
        double r50099 = 2.0;
        double r50100 = t;
        double r50101 = r50099 / r50100;
        double r50102 = r50098 / r50100;
        double r50103 = r50098 + r50102;
        double r50104 = r50101 / r50103;
        double r50105 = r50099 - r50104;
        double r50106 = log1p(r50105);
        double r50107 = expm1(r50106);
        double r50108 = sqrt(r50099);
        double r50109 = r50103 * r50100;
        double r50110 = r50099 / r50109;
        double r50111 = -r50110;
        double r50112 = fma(r50108, r50108, r50111);
        double r50113 = r50107 * r50112;
        double r50114 = r50099 + r50113;
        double r50115 = r50098 / r50114;
        double r50116 = r50098 - r50115;
        return r50116;
}

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 add-sqr-sqrt0.0

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

    \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \color{blue}{\mathsf{fma}\left(\sqrt{2}, \sqrt{2}, -\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}}\]
  5. Simplified0.0

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

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

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

Reproduce

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